dhbw.clippinggorilla.userinterface.windows.ActivateWindow.java Source code

Java tutorial

Introduction

Here is the source code for dhbw.clippinggorilla.userinterface.windows.ActivateWindow.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package dhbw.clippinggorilla.userinterface.windows;

import com.vaadin.event.ShortcutAction;
import com.vaadin.icons.VaadinIcons;
import com.vaadin.server.AbstractErrorMessage;
import com.vaadin.server.ErrorMessage;
import com.vaadin.server.Sizeable;
import com.vaadin.server.UserError;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.FormLayout;
import com.vaadin.ui.GridLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.TextField;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Window;
import com.vaadin.ui.themes.ValoTheme;
import dhbw.clippinggorilla.objects.user.User;
import dhbw.clippinggorilla.objects.user.UserUtils;
import dhbw.clippinggorilla.utilities.language.Language;
import dhbw.clippinggorilla.utilities.language.Word;
import dhbw.clippinggorilla.utilities.ui.VaadinUtils;
import org.apache.commons.mail.EmailException;

/**
 * This is the Window which shows the activatecode textField
 *
 * @author frank
 */
public class ActivateWindow {

    public static Window get() {
        Window window = new Window();
        window.setModal(true);
        window.setResizable(false);
        window.setDraggable(false);
        window.setCaption(Language.get(Word.ACTIVATION_CODE));
        window.addCloseShortcut(ShortcutAction.KeyCode.ENTER, null);

        VerticalLayout windowLayout = new VerticalLayout();
        windowLayout.setMargin(false);
        windowLayout.setSizeUndefined();

        FormLayout forms = new FormLayout();
        forms.setMargin(true);
        forms.setSizeUndefined();

        Button save = new Button(Language.get(Word.ACTIVATE));

        TextField activationCode = new TextField(Language.get(Word.ACTIVATION_CODE));
        activationCode.setMaxLength(6);
        activationCode.focus();
        activationCode.addValueChangeListener(e -> {
            if (activationCode.getValue().length() > 5) {
                save.setEnabled(true);
                activationCode.setComponentError(null);
            } else {
                save.setEnabled(false);
                activationCode.setComponentError(new UserError(Language.get(Word.ACTIVATION_CODE_SIX_CHARS),
                        AbstractErrorMessage.ContentMode.HTML, ErrorMessage.ErrorLevel.INFORMATION));
                VaadinUtils.infoNotification(Language.get(Word.ACTIVATION_CODE_SIX_CHARS));
            }
        });
        forms.addComponent(activationCode);

        Button resendMail = new Button(Language.get(Word.RESEND_ACTIVATION_CODE));
        resendMail.addStyleName(ValoTheme.BUTTON_BORDERLESS_COLORED);
        resendMail.addClickListener(ce -> {
            try {
                UserUtils.resendActivationMail(UserUtils.getCurrent());
                VaadinUtils.infoNotification(Language.get(Word.RESEND_ACTIVATION_CODE_SUCCESSFUL));
            } catch (EmailException ex) {
                VaadinUtils.errorNotification(Language.get(Word.RESEND_ACTIVATION_CODE_FAILED));
            }
        });
        forms.addComponent(resendMail);

        GridLayout footer = new GridLayout(3, 1);
        footer.setSpacing(true);
        footer.addStyleName(ValoTheme.WINDOW_BOTTOM_TOOLBAR);
        footer.setWidth(100.0f, Sizeable.Unit.PERCENTAGE);

        Label placeholder = new Label();

        Button cancel = new Button(Language.get(Word.CANCEL));
        cancel.setIcon(VaadinIcons.CLOSE);
        cancel.addClickListener(ce -> {
            window.close();
        });
        cancel.setClickShortcut(ShortcutAction.KeyCode.ESCAPE, null);

        save.setEnabled(false);
        save.setIcon(VaadinIcons.CHECK);
        save.addStyleName(ValoTheme.BUTTON_PRIMARY);
        save.addClickListener(ce -> {
            try {
                String code = activationCode.getValue();
                User user = UserUtils.getCurrent();
                if (UserUtils.activateUser(user, code)) {
                    VaadinUtils.infoNotification(Language.get(Word.ACTIVATION_SUCCESSFUL));
                    window.close();
                } else {
                    activationCode.setValue("");
                    VaadinUtils.errorNotification(Language.get(Word.ACTIVATION_FAILED));
                }
            } catch (NumberFormatException e) {
            }
        });
        save.setClickShortcut(ShortcutAction.KeyCode.ENTER, null);

        footer.setSizeUndefined();
        footer.setWidth("100%");
        footer.addComponents(placeholder, cancel, save);
        footer.setColumnExpandRatio(0, 1);//ExpandRatio(placeholder, 1);
        footer.setComponentAlignment(cancel, Alignment.MIDDLE_CENTER);
        footer.setComponentAlignment(save, Alignment.MIDDLE_CENTER);

        windowLayout.addComponent(forms);
        windowLayout.addComponent(footer);

        window.setContent(windowLayout);
        return window;
    }

}