/** * OpenKM, Open Document Management System (http://www.openkm.com) * Copyright (c) 2006-2011 Paco Avila & Josep Llort * * No bytes were intentionally harmed during the development of this application. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ package com.openkm.frontend.client.widget.properties; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.FlexTable; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.HasAlignment; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.ScrollPanel; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.HTMLTable.CellFormatter; import com.openkm.frontend.client.Main; import com.openkm.frontend.client.bean.GWTDocument; import com.openkm.frontend.client.bean.GWTMail; import com.openkm.frontend.client.util.Util; import com.openkm.frontend.client.widget.foldertree.FolderSelectPopup; import com.openkm.frontend.client.widget.properties.attachment.ExtendedFlexTable; import com.openkm.frontend.client.widget.properties.attachment.MenuPopup; /** * Mail * * @author jllort * */ public class Mail extends Composite { private FlexTable table; private FlexTable dataTable; private ExtendedFlexTable attachmentsTable; private HorizontalPanel contentPanel; private ScrollPanel scrollPanel; private HTML content; public MenuPopup menuPopup; private Map<Integer, GWTDocument> attachmentsList; private GWTMail mail; public Mail() { table = new FlexTable(); dataTable = new FlexTable(); attachmentsTable = new ExtendedFlexTable(); contentPanel = new HorizontalPanel(); scrollPanel = new ScrollPanel(table); menuPopup = new MenuPopup(); attachmentsList = new HashMap<Integer, GWTDocument>(); table.setCellPadding(0); table.setCellSpacing(0); dataTable.setCellPadding(3); dataTable.setCellSpacing(2); dataTable.setHTML(0, 0, "<b>"+Main.i18n("mail.from")+"</b>"); dataTable.setHTML(0, 1, ""); dataTable.setHTML(0, 2, ""); dataTable.setHTML(1, 0, "<b>"+Main.i18n("mail.reply")+"</b>"); dataTable.setHTML(1, 1, ""); dataTable.setHTML(2, 0, "<b>"+Main.i18n("mail.to")+"</b>"); dataTable.setHTML(3, 1, ""); dataTable.setHTML(3, 0, "<b>"+Main.i18n("mail.subject")+"</b>"); dataTable.getCellFormatter().setWidth(0, 2, "100%"); dataTable.getCellFormatter().setVerticalAlignment(1, 1, HasAlignment.ALIGN_TOP); dataTable.getCellFormatter().setVerticalAlignment(2, 1, HasAlignment.ALIGN_TOP); // Sets wordWrap for al rows for (int i=0; i<4; i++) { setRowWordWarp(i, 2, false, dataTable); } HTML separatorLeft = new HTML(""); HTML separatorRight = new HTML(""); content = new HTML(""); contentPanel.add(separatorLeft); contentPanel.add(content); contentPanel.add(separatorRight); contentPanel.setCellWidth(separatorLeft, "5px"); content.setWidth("100%"); contentPanel.setCellWidth(separatorRight, "5px"); contentPanel.setWidth("100%"); attachmentsTable.setCellPadding(3); attachmentsTable.setCellSpacing(2); attachmentsTable.setHTML(0, 0, "<b>"+Main.i18n("mail.attachment")+"</b>"); attachmentsTable.getFlexCellFormatter().setColSpan(0, 0, 3); attachmentsTable.getCellFormatter().setHorizontalAlignment(0, 0, HasAlignment.ALIGN_CENTER); table.setWidget(0, 0, dataTable); table.setWidget(0, 1, attachmentsTable); table.setHTML(1, 0, ""); table.setWidget(2, 0, contentPanel); table.getCellFormatter().setVerticalAlignment(0, 0, HasAlignment.ALIGN_TOP); table.getCellFormatter().setVerticalAlignment(0, 1, HasAlignment.ALIGN_TOP); table.getCellFormatter().setHorizontalAlignment(0, 1, HasAlignment.ALIGN_RIGHT); table.getFlexCellFormatter().setHeight(1,0,"10px"); table.getFlexCellFormatter().setColSpan(1, 0, 2); table.getFlexCellFormatter().setColSpan(2, 0, 2); table.getRowFormatter().setStyleName(1, "okm-Mail-White"); table.getRowFormatter().setStyleName(2, "okm-Mail-White"); table.setWidth("100%"); dataTable.setStyleName("okm-DisableSelect"); table.setStyleName("okm-Mail"); menuPopup.setStyleName("okm-Mail-MenuPopup"); attachmentsTable.setStyleName("okm-NoWrap"); initWidget(scrollPanel); } /** * Set the WordWarp for all the row cells * * @param row The row cell * @param columns Number of row columns * @param warp * @param table The table to change word wrap */ private void setRowWordWarp(int row, int columns, boolean warp, FlexTable table) { CellFormatter cellFormatter = table.getCellFormatter(); for (int i=0; i<columns; i++) { cellFormatter.setWordWrap(row, i, warp); } } /** * get * * @return */ public GWTMail get() { return mail; } /** * Sets the mail values * * @param mail The document object */ public void set(GWTMail mail) { this.mail = mail; Anchor hFrom = new Anchor(); final String mailFrom = mail.getFrom().contains("<")?mail.getFrom().substring(mail.getFrom().indexOf("<")+1, mail.getFrom().indexOf(">")):mail.getFrom(); hFrom.setHTML(mail.getFrom().replace("<", "<").replace(">", ">")); hFrom.setTitle("mailto:"+mailFrom); hFrom.setStyleName("okm-Mail-Link"); hFrom.addStyleName("okm-NoWrap"); hFrom.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { Window.open("mailto:" + mailFrom, "_self", ""); } }); dataTable.setWidget(0, 1, hFrom); VerticalPanel replyPanel = new VerticalPanel(); for (int i=0; i<mail.getReply().length; i++) { Anchor hReply = new Anchor(); final String mailReply = mail.getReply()[i].contains("<")?mail.getReply()[i].substring(mail.getReply()[i].indexOf("<")+1, mail.getReply()[i].indexOf(">")):mail.getReply()[i]; hReply.setHTML(mail.getReply()[i].replace("<", "<").replace(">", ">")); hReply.setTitle("mailto:"+mailReply); hReply.setStyleName("okm-Mail-Link"); hReply.addStyleName("okm-NoWrap"); hReply.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { Window.open("mailto:" + mailReply, "_self", ""); } }); replyPanel.add(hReply); } dataTable.setWidget(1, 1, replyPanel); VerticalPanel toPanel = new VerticalPanel(); for (int i=0; i<mail.getTo().length; i++) { Anchor hTo = new Anchor(); final String mailTo = mail.getTo()[i].contains("<")?mail.getTo()[i].substring(mail.getTo()[i].indexOf("<")+1, mail.getTo()[i].indexOf(">")):mail.getTo()[i]; hTo.setHTML(mail.getTo()[i].replace("<", "<").replace(">", ">")); hTo.setTitle("mailto:"+mailTo); hTo.setStyleName("okm-Mail-Link"); hTo.addStyleName("okm-NoWrap"); hTo.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { Window.open("mailto:" + mailTo, "_self", ""); } }); toPanel.add(hTo); } dataTable.setWidget(2, 1, toPanel); dataTable.setHTML(3, 1, mail.getSubject()); if (mail.getMimeType().equals("text/plain")) { content.setHTML(mail.getContent().replace("\n", "<br/>")); } else { content.setHTML(mail.getContent()); } attachmentsTable.removeAllRows(); attachmentsList = new HashMap<Integer, GWTDocument>(); int count = 0; for (Iterator<GWTDocument> it = mail.getAttachments().iterator(); it.hasNext();) { final GWTDocument attach = it.next(); attachmentsList.put(new Integer(count), attach); count++; Anchor hLink = new Anchor(); hLink.setHTML(attach.getName()); hLink.setTitle(attach.getName()); hLink.setStyleName("okm-Mail-Link"); hLink.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { Util.downloadFile(attach.getPath(), ""); } }); int row = attachmentsTable.getRowCount(); attachmentsTable.setHTML(row, 0, Util.mimeImageHTML(attach.getMimeType())); attachmentsTable.setWidget(row, 1, hLink); attachmentsTable.setHTML(row, 2, Util.formatSize(attach.getActualVersion().getSize())); attachmentsTable.getCellFormatter().setHorizontalAlignment(row, 2, HasAlignment.ALIGN_CENTER); } } /** * Gets the attach * * @param selectedRow The selected row * * @return The attach */ public GWTDocument getAttach(int selectedRow) { // Attachements are writem from second row if (attachmentsTable.getSelectedRow()>0 && attachmentsList.containsKey(new Integer(selectedRow-1))) { return (attachmentsList.get(new Integer(selectedRow-1))); } else { return null; } } public void downloadAttachment() { // Attachements are writem from second row if (attachmentsTable.getSelectedRow()>0) { if (getAttach(attachmentsTable.getSelectedRow())!=null) { Util.downloadFile(getAttach(attachmentsTable.getSelectedRow()).getPath(), ""); } } } public void copyAttachment() { // Attachements are writem from second row if (attachmentsTable.getSelectedRow()>0) { Main.get().activeFolderTree.folderSelectPopup.setEntryPoint(FolderSelectPopup.ENTRYPOINT_MAIL_ATTACH); Main.get().activeFolderTree.folderSelectPopup.setToCopy(getAttach(attachmentsTable.getSelectedRow())); Main.get().activeFolderTree.showDirectorySelectPopup(); } } /** * Lang refresh */ public void langRefresh() { dataTable.setHTML(0, 0, "<b>"+Main.i18n("mail.from")+"</b>"); dataTable.setHTML(1, 0, "<b>"+Main.i18n("mail.reply")+"</b>"); dataTable.setHTML(2, 0, "<b>"+Main.i18n("mail.to")+"</b>"); dataTable.setHTML(3, 0, "<b>"+Main.i18n("mail.subject")+"</b>"); attachmentsTable.setHTML(0, 0, "<b>"+Main.i18n("mail.attachment")+"</b>"); menuPopup.langRefresh(); } }