package ppj09.gwt.swapweb.client.gui;
import java.util.ArrayList;
import ppj09.gwt.swapweb.client.SwapWeb;
import ppj09.gwt.swapweb.client.datatype.Message;
import ppj09.gwt.swapweb.client.serverInterface.MessageHandler;
import ppj09.gwt.swapweb.client.serverInterface.MessageHandlerAsync;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Label;
import com.gwtext.client.core.EventObject;
import com.gwtext.client.data.ArrayReader;
import com.gwtext.client.data.FieldDef;
import com.gwtext.client.data.MemoryProxy;
import com.gwtext.client.data.RecordDef;
import com.gwtext.client.data.Store;
import com.gwtext.client.data.StringFieldDef;
import com.gwtext.client.widgets.Button;
import com.gwtext.client.widgets.Panel;
import com.gwtext.client.widgets.Toolbar;
import com.gwtext.client.widgets.ToolbarButton;
import com.gwtext.client.widgets.Window;
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
import com.gwtext.client.widgets.grid.ColumnConfig;
import com.gwtext.client.widgets.grid.ColumnModel;
import com.gwtext.client.widgets.grid.GridPanel;
import com.gwtext.client.widgets.grid.event.GridRowListener;
import com.gwtext.client.widgets.layout.AccordionLayout;
import com.gwtext.client.widgets.layout.HorizontalLayout;
/**
* @author Michael Lukaszczyk
* @author Projekt Team 4711
*/
public class MailboxView extends Composite{
private GridPanel inboxGrid;
private GridPanel outboxGrid;
private Panel inbox;
private Panel outbox;
private Object[][] inboxItems;
private Object[][] outboxItems;
private Panel accordionPanel;
private Label message;
private Label subject;
private Label author;
private String authorTemp;
private String subjectTemp;
private ArrayList<Message> inboxItemsArrayList;
private ArrayList<Message> outboxItemsArrayList;
public MailboxView() {
Panel mainWindow = new Panel();
mainWindow.setBorder(false);
mainWindow.setCollapsible(true);
mainWindow.setPaddings(0);
mainWindow.setLayout(new HorizontalLayout(0));
// composeMessage Button in bottom toolbar
ToolbarButton compose = new ToolbarButton("Nachricht verfassen");
compose.addListener(new ButtonListenerAdapter() {
public void onClick(Button button, EventObject e) {
new MessageComposeView();
}
});
// Aktualisieren Button in bottom toolbar
ToolbarButton refresh = new ToolbarButton("Empfangen");
refresh.addListener(new ButtonListenerAdapter() {
public void onClick(Button button, EventObject e) {
inbox.clear();
outbox.clear();
receiveMessages();
}
});
Toolbar mainWindowToolbar = new Toolbar();
mainWindowToolbar.addButton(compose);
mainWindowToolbar.addButton(refresh);
mainWindow.setTopToolbar(mainWindowToolbar);
accordionPanel = createAccordionPanel();
accordionPanel.setHeight(450);
accordionPanel.setWidth(408);
mainWindow.add(accordionPanel);
mainWindow.add(getMailContents());
Window window = new Window();
window.setTitle("Postfach");
window.setPaddings(0);
window.setBorder(false);
window.add(mainWindow);
window.show();
}
private Panel createAccordionPanel() {
Panel accordionPanel = new Panel();
accordionPanel.setLayout(new AccordionLayout(true));
inbox = new Panel("Posteingang");
inbox.setAutoScroll(true);
inbox.setAutoHeight(true);
inbox.setPaddings(0);
accordionPanel.add(inbox);
outbox = new Panel("Postausgang");
outbox.setAutoScroll(true);
outbox.setAutoHeight(true);
outbox.setPaddings(0);
accordionPanel.add(outbox);
receiveMessages();
return accordionPanel;
}
private void receiveMessages() {
MessageHandlerAsync messageHandler = GWT.create(MessageHandler.class);
messageHandler.getMessages(SwapWeb.getUserNameFromSession(),
new AsyncCallback<ArrayList<Message>>() {
public void onFailure(Throwable caught) {
System.out.println("RPC failed @ MailboxView: "
+ caught);
}
public void onSuccess(ArrayList<Message> result) {
System.out.println(result.get(0).getDate());
inboxItems = new Object[result.size()][10];
outboxItems = new Object[result.size()][10];
inboxItemsArrayList = new ArrayList<Message>();
outboxItemsArrayList = new ArrayList<Message>();
int j = 0;
int k = 0;
for (int i = 0; i < result.size(); i++) {
if (!(result.get(i).getAuthor().equals(SwapWeb
.getUserNameFromSession()))) {
inboxItemsArrayList.add(result.get(i));
inboxItems[j] = new Object[] {
result.get(i).getAuthor(),
result.get(i).getTopic(),
result.get(i).getDate() };
j++;
} else {
outboxItemsArrayList.add(result.get(i));
outboxItems[k] = new Object[] {
result.get(i).getAuthor(),
result.get(i).getTopic(),
result.get(i).getDate() };
k++;
}
}
inbox.add(createInbox());
outbox.add(createOutbox());
inbox.doLayout();
outbox.doLayout();
accordionPanel.doLayout();
}
});
}
private Panel getMailContents() {
Panel mailContents = new Panel();
mailContents.setBorder(false);
mailContents.setWidth(420);
mailContents.setHeight(450);
Panel messageWindow = new Panel();
messageWindow.setTitle("Nachricht");
messageWindow.setPaddings(5);
messageWindow.setWidth(420);
messageWindow.setHeight(450);
messageWindow.setBorder(true);
messageWindow.setAutoScroll(true);
mailContents.add(messageWindow);
author = new Label();
messageWindow.add(author);
subject = new Label();
messageWindow.add(subject);
Label messageSeperator = new Label();
messageSeperator.setHeight("10");
messageWindow.add(messageSeperator);
message = new Label();
messageWindow.add(message);
// respond Button in bottom toolbar
ToolbarButton respond = new ToolbarButton("Antworten");
respond.addListener(new ButtonListenerAdapter() {
public void onClick(Button button, EventObject e) {
new MessageComposeView(authorTemp, subjectTemp);
}
});
Toolbar mailContentToolbar = new Toolbar();
mailContentToolbar.addButton(respond);
messageWindow.setBottomToolbar(mailContentToolbar);
return mailContents;
};
private Panel createInbox() {
RecordDef recordDef = new RecordDef(new FieldDef[] {
new StringFieldDef("author"), new StringFieldDef("topic"),
new StringFieldDef("date") });
inboxGrid = new GridPanel();
Object[][] data = inboxItems;
MemoryProxy proxy = new MemoryProxy(data);
ArrayReader reader = new ArrayReader(recordDef);
Store store = new Store(proxy, reader);
store.load();
inboxGrid.setStore(store);
ColumnConfig[] columns = new ColumnConfig[] {
new ColumnConfig("Datum", "date", 90, true, null, "date"),
new ColumnConfig("Betreff", "topic", 170, true, null, "topic"),
new ColumnConfig("Von", "author", 120, true, null, "author") };
ColumnModel columnModel = new ColumnModel(columns);
inboxGrid.setColumnModel(columnModel);
inboxGrid.setStripeRows(true);
inboxGrid.setAutoExpandColumn("topic");
inboxGrid.setHeight(399);
inboxGrid.setWidth(400);
inboxGrid.addGridRowListener(new GridRowListener() {
public void onRowClick(GridPanel grid, int rowIndex, EventObject e) {
authorTemp = (inboxItemsArrayList.get(rowIndex).getAuthor());
subjectTemp = (inboxItemsArrayList.get(rowIndex).getTopic());
author.setText("Von: "
+ (inboxItemsArrayList.get(rowIndex).getAuthor()));
subject.setText("Betreff: "
+ (inboxItemsArrayList.get(rowIndex).getTopic()));
message.setText(inboxItemsArrayList.get(rowIndex).getMessage());
MessageHandlerAsync messageHandler = GWT
.create(MessageHandler.class);
messageHandler.setIsRead(inboxItemsArrayList.get(rowIndex)
.getMessageId(), new AsyncCallback<Integer>() {
public void onFailure(Throwable caught) {
System.out.println("Fehler: " + caught);
}
public void onSuccess(Integer result) {
SwapWeb.getUnreadedMsgs();
}
});
}
public void onRowContextMenu(GridPanel grid, int rowIndex,
EventObject e) {
}
public void onRowDblClick(GridPanel grid, int rowIndex,
EventObject e) {
}
});
inboxGrid.doLayout();
return inboxGrid;
}
private Panel createOutbox() {
RecordDef recordDef = new RecordDef(new FieldDef[] {
new StringFieldDef("date"), new StringFieldDef("topic"),
new StringFieldDef("author") });
outboxGrid = new GridPanel();
Object[][] data = outboxItems;
MemoryProxy proxy = new MemoryProxy(data);
ArrayReader reader = new ArrayReader(recordDef);
Store store = new Store(proxy, reader);
store.load();
outboxGrid.setStore(store);
ColumnConfig[] columns = new ColumnConfig[] {
new ColumnConfig("Datum", "date", 90, true, null, "date"),
new ColumnConfig("Betreff", "topic", 170, true, null, "topic"),
new ColumnConfig("Von", "author", 120, true, null, "author") };
ColumnModel columnModel = new ColumnModel(columns);
outboxGrid.setColumnModel(columnModel);
outboxGrid.setStripeRows(true);
outboxGrid.setAutoExpandColumn("topic");
outboxGrid.setHeight(399);
outboxGrid.setWidth(400);
outboxGrid.addGridRowListener(new GridRowListener() {
public void onRowClick(GridPanel grid, int rowIndex, EventObject e) {
authorTemp = (outboxItemsArrayList.get(rowIndex).getAuthor());
subjectTemp = (outboxItemsArrayList.get(rowIndex).getTopic());
author.setText("Von: "
+ (outboxItemsArrayList.get(rowIndex).getAuthor()));
subject.setText("Betreff: NEU "
+ (outboxItemsArrayList.get(rowIndex).getTopic()));
message
.setText(outboxItemsArrayList.get(rowIndex)
.getMessage());
MessageHandlerAsync messageHandler = GWT
.create(MessageHandler.class);
messageHandler.setIsRead(inboxItemsArrayList.get(rowIndex)
.getMessageId(), new AsyncCallback<Integer>() {
public void onFailure(Throwable caught) {
System.out.println("Fehler: " + caught);
}
public void onSuccess(Integer result) {
}
});
}
public void onRowContextMenu(GridPanel grid, int rowIndex,
EventObject e) {
}
public void onRowDblClick(GridPanel grid, int rowIndex,
EventObject e) {
}
});
outboxGrid.doLayout();
return outboxGrid;
}
}