Java tutorial
/** * This file is part of mycollab-web. * * mycollab-web 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 3 of the License, or * (at your option) any later version. * * mycollab-web 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 mycollab-web. If not, see <http://www.gnu.org/licenses/>. */ package com.esofthead.mycollab.vaadin.ui; import java.io.File; import java.util.ArrayList; import java.util.List; import org.apache.commons.lang3.StringUtils; import org.vaadin.easyuploads.MultiFileUploadExt; import com.esofthead.mycollab.common.i18n.GenericI18Enum; import com.esofthead.mycollab.module.mail.EmailAttachementSource; import com.esofthead.mycollab.module.mail.FileEmailAttachmentSource; import com.esofthead.mycollab.module.mail.service.ExtMailService; import com.esofthead.mycollab.spring.ApplicationContextUtil; import com.esofthead.mycollab.vaadin.AppContext; import com.vaadin.ui.Alignment; import com.vaadin.ui.Button; import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.Component; import com.vaadin.ui.CssLayout; import com.vaadin.ui.GridLayout; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Label; import com.vaadin.ui.Layout; import com.vaadin.ui.RichTextArea; import com.vaadin.ui.TextField; import com.vaadin.ui.Window; /** * * @author MyCollab Ltd. * @since 1.0 * */ public class MailFormWindow extends Window { private static final long serialVersionUID = 1L; private EmailTokenField tokenFieldMailTo; private EmailTokenField tokenFieldMailCc = new EmailTokenField(); private final EmailTokenField tokenFieldMailBcc = new EmailTokenField(); private GridLayout inputLayout; private Layout subjectField; private Layout ccField; private Layout bccField; private Button btnLinkCc; private Button btnLinkBcc; private boolean isAddCc = false; private boolean isAddBcc = false; private List<String> lstMail; public MailFormWindow() { this.setModal(true); initLayout(); } public MailFormWindow(List<String> lstMail) { this.setModal(true); this.lstMail = lstMail; initLayout(); } private void initLayout() { this.setWidth("830px"); this.setHeightUndefined(); initUI(); center(); this.setModal(true); this.setResizable(false); } @SuppressWarnings("serial") private void initButtonLinkCcBcc() { btnLinkCc = new Button("Add Cc"); btnLinkCc.setStyleName("link"); inputLayout.addComponent(btnLinkCc, 1, 0); inputLayout.setComponentAlignment(btnLinkCc, Alignment.MIDDLE_CENTER); btnLinkBcc = new Button("Add Bcc"); btnLinkBcc.setStyleName("link"); inputLayout.addComponent(btnLinkBcc, 2, 0); inputLayout.setComponentAlignment(btnLinkBcc, Alignment.MIDDLE_CENTER); btnLinkCc.addClickListener(new Button.ClickListener() { @Override public void buttonClick(ClickEvent event) { buttonLinkCcClick(event); } }); btnLinkBcc.addClickListener(new Button.ClickListener() { @Override public void buttonClick(ClickEvent event) { butonLinkBccClick(event); } }); } private Layout createTextFieldMail(String title, Component component) { HorizontalLayout layout = new HorizontalLayout(); Label lbTitle = new Label(title); lbTitle.setWidth("60px"); lbTitle.setStyleName("lbmail"); layout.addComponent(lbTitle); layout.setComponentAlignment(lbTitle, Alignment.MIDDLE_RIGHT); layout.addComponent(component); layout.setComponentAlignment(component, Alignment.MIDDLE_LEFT); layout.setWidth("100%"); layout.setExpandRatio(component, 1.0f); return layout; } private void initUI() { GridLayout mainLayout = new GridLayout(1, 5); mainLayout.setWidth("100%"); mainLayout.setMargin(true); mainLayout.setSpacing(true); CssLayout inputPanel = new CssLayout(); inputPanel.setWidth("100%"); inputPanel.setStyleName("mail-panel"); inputLayout = new GridLayout(3, 4); inputLayout.setSpacing(true); inputLayout.setWidth("100%"); inputLayout.setColumnExpandRatio(0, 1.0f); inputPanel.addComponent(inputLayout); mainLayout.addComponent(inputPanel); tokenFieldMailTo = new EmailTokenField(); tokenFieldMailTo.setRequired(true); inputLayout.addComponent(createTextFieldMail("To:", tokenFieldMailTo), 0, 0); if (lstMail != null) { for (String mail : lstMail) { if (StringUtils.isNotBlank(mail)) { if (mail.indexOf("<") > -1) { String strMail = mail.substring(mail.indexOf("<") + 1, mail.lastIndexOf(">")); if (strMail != null && !strMail.equalsIgnoreCase("null")) { tokenFieldMailTo.addToken(mail); } } else { tokenFieldMailTo.addToken(mail); } } } } final TextField subject = new TextField(); subject.setRequired(true); subject.setWidth("100%"); subjectField = createTextFieldMail("Subject:", subject); inputLayout.addComponent(subjectField, 0, 1); initButtonLinkCcBcc(); ccField = createTextFieldMail("Cc:", tokenFieldMailCc); bccField = createTextFieldMail("Bcc:", tokenFieldMailBcc); final RichTextArea noteArea = new RichTextArea(); noteArea.setWidth("100%"); noteArea.setHeight("200px"); mainLayout.addComponent(noteArea, 0, 1); mainLayout.setComponentAlignment(noteArea, Alignment.MIDDLE_CENTER); HorizontalLayout controlsLayout = new HorizontalLayout(); controlsLayout.setWidth("100%"); final AttachmentPanel attachments = new AttachmentPanel(); attachments.setWidth("500px"); MultiFileUploadExt uploadExt = new MultiFileUploadExt(attachments); uploadExt.addComponent(attachments); controlsLayout.addComponent(uploadExt); controlsLayout.setExpandRatio(uploadExt, 1.0f); controlsLayout.setSpacing(true); Button cancelBtn = new Button(AppContext.getMessage(GenericI18Enum.BUTTON_CANCEL), new Button.ClickListener() { private static final long serialVersionUID = 1L; @Override public void buttonClick(ClickEvent event) { MailFormWindow.this.close(); } }); cancelBtn.setStyleName(UIConstants.THEME_GRAY_LINK); controlsLayout.addComponent(cancelBtn); controlsLayout.setComponentAlignment(cancelBtn, Alignment.MIDDLE_RIGHT); Button sendBtn = new Button("Send", new Button.ClickListener() { private static final long serialVersionUID = 1L; @Override public void buttonClick(ClickEvent event) { if (tokenFieldMailTo.getListRecipient().size() <= 0 || subject.getValue().equals("")) { NotificationUtil.showErrorNotification( "To Email field and Subject field must be not empty! Please fulfil them before sending email."); return; } if (AppContext.getSession().getEmail() != null && AppContext.getSession().getEmail().length() > 0) { ExtMailService systemMailService = ApplicationContextUtil.getSpringBean(ExtMailService.class); List<File> listFile = attachments.getListFile(); List<EmailAttachementSource> emailAttachmentSource = null; if (listFile != null && listFile.size() > 0) { emailAttachmentSource = new ArrayList<EmailAttachementSource>(); for (File file : listFile) { emailAttachmentSource.add(new FileEmailAttachmentSource(file)); } } systemMailService.sendHTMLMail(AppContext.getSession().getEmail(), AppContext.getSession().getDisplayName(), tokenFieldMailTo.getListRecipient(), tokenFieldMailCc.getListRecipient(), tokenFieldMailBcc.getListRecipient(), subject.getValue().toString(), noteArea.getValue().toString(), emailAttachmentSource); MailFormWindow.this.close(); } else { NotificationUtil.showErrorNotification( "Your email is empty value, please fulfil it before sending email!"); } } }); sendBtn.setStyleName(UIConstants.THEME_GREEN_LINK); controlsLayout.addComponent(sendBtn); controlsLayout.setComponentAlignment(sendBtn, Alignment.MIDDLE_RIGHT); mainLayout.addComponent(controlsLayout, 0, 2); this.setContent(mainLayout); } private void checkToReInitCcBcc() { if ((!isAddCc) && (!isAddBcc)) { inputLayout.removeComponent(btnLinkCc); inputLayout.removeComponent(btnLinkBcc); initButtonLinkCcBcc(); inputLayout.removeComponent(subjectField); inputLayout.removeComponent(0, 1); inputLayout.addComponent(subjectField, 0, 1); } } private void buttonLinkCcClick(ClickEvent event) { removeAllInputField(); if (!isAddCc) { btnLinkCc.setCaption("Remove Cc"); if (!isAddBcc) { inputLayout.addComponent(ccField, 0, 1); inputLayout.addComponent(btnLinkCc, 1, 1); inputLayout.addComponent(btnLinkBcc, 2, 1); inputLayout.addComponent(subjectField, 0, 2); } else { addFullInputFieldByOrder(); } } else { tokenFieldMailCc.removeAllRecipients(); btnLinkCc.setCaption("Add Cc"); if (isAddBcc) { inputLayout.addComponent(bccField, 0, 1); inputLayout.addComponent(btnLinkBcc, 1, 1); inputLayout.addComponent(btnLinkCc, 2, 1); inputLayout.addComponent(subjectField, 0, 2); } else { inputLayout.addComponent(btnLinkBcc, 1, 0); inputLayout.addComponent(btnLinkCc, 2, 0); inputLayout.addComponent(subjectField, 0, 1); } } inputLayout.setComponentAlignment(btnLinkBcc, Alignment.MIDDLE_CENTER); inputLayout.setComponentAlignment(btnLinkCc, Alignment.MIDDLE_CENTER); isAddCc = !isAddCc; checkToReInitCcBcc(); } private void addFullInputFieldByOrder() { inputLayout.addComponent(ccField, 0, 1); inputLayout.addComponent(btnLinkCc, 1, 1); inputLayout.addComponent(bccField, 0, 2); inputLayout.addComponent(btnLinkBcc, 1, 2); inputLayout.addComponent(subjectField, 0, 3); } private void removeAllInputField() { inputLayout.removeComponent(btnLinkCc); inputLayout.removeComponent(ccField); inputLayout.removeComponent(subjectField); inputLayout.removeComponent(bccField); inputLayout.removeComponent(btnLinkBcc); } private void butonLinkBccClick(ClickEvent event) { removeAllInputField(); if (!isAddBcc) { btnLinkBcc.setCaption("Remove Bcc"); if (!isAddCc) { inputLayout.addComponent(bccField, 0, 1); inputLayout.addComponent(btnLinkCc, 1, 1); inputLayout.addComponent(btnLinkBcc, 2, 1); inputLayout.addComponent(subjectField, 0, 2); } else { addFullInputFieldByOrder(); } } else { btnLinkBcc.setCaption("Add Bcc"); tokenFieldMailBcc.removeAllRecipients(); if (isAddCc) { inputLayout.addComponent(ccField, 0, 1); inputLayout.addComponent(btnLinkCc, 1, 1); inputLayout.addComponent(btnLinkBcc, 2, 1); inputLayout.addComponent(subjectField, 0, 2); } else { inputLayout.addComponent(btnLinkBcc, 1, 0); inputLayout.addComponent(btnLinkCc, 2, 0); inputLayout.addComponent(subjectField, 0, 1); } } inputLayout.setComponentAlignment(btnLinkBcc, Alignment.MIDDLE_CENTER); inputLayout.setComponentAlignment(btnLinkCc, Alignment.MIDDLE_CENTER); isAddBcc = !isAddBcc; checkToReInitCcBcc(); } }