de.fatalix.bookery.view.admin.AppUserCard.java Source code

Java tutorial

Introduction

Here is the source code for de.fatalix.bookery.view.admin.AppUserCard.java

Source

/*
 * Copyright (c) 2015 Felix Husse under MIT License
 * see LICENSE file
 */
package de.fatalix.bookery.view.admin;

import com.vaadin.event.FieldEvents;
import com.vaadin.server.FontAwesome;
import com.vaadin.ui.Button;
import com.vaadin.ui.CssLayout;
import com.vaadin.ui.FormLayout;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.PasswordField;
import com.vaadin.ui.TextField;
import com.vaadin.ui.themes.ValoTheme;
import de.fatalix.bookery.bl.model.AppUser;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.inject.Inject;

/**
 *
 * @author felix.husse
 */
public class AppUserCard extends CssLayout {

    private final List<Listener> listeners = new ArrayList<>();

    @Inject
    private AdminPresenter presenter;

    private AppUser appUser;

    private Label captionLabel;
    private TextField usernameField;
    private PasswordField passwordField;
    private TextField fullnameField;
    private TextField eMailField;
    private TextField roles;

    @PostConstruct
    private void postInit() {
        addStyleName("bookery-content");
        addComponents(createHeader(), createContent());
        setWidth(380, Unit.PIXELS);
        setHeight(240, Unit.PIXELS);
    }

    private HorizontalLayout createHeader() {
        captionLabel = new Label("some.user");
        Button deleteUser = new Button(null, new Button.ClickListener() {

            @Override
            public void buttonClick(Button.ClickEvent event) {
                presenter.deleteUser(appUser);
                for (Listener listener : listeners) {
                    listener.userDeleted(AppUserCard.this);
                }
            }
        });
        deleteUser.setIcon(FontAwesome.TIMES_CIRCLE);
        deleteUser.addStyleName("borderless");
        deleteUser.addStyleName("icon-only");

        HorizontalLayout captionLayout = new HorizontalLayout();
        captionLayout.addStyleName("v-panel-caption");
        captionLayout.setWidth("100%");
        captionLayout.addComponents(captionLabel, deleteUser);
        captionLayout.setExpandRatio(captionLabel, 1);

        return captionLayout;
    }

    private FormLayout createContent() {
        usernameField = new TextField("Username", "some.user");
        passwordField = new PasswordField("Password", "password");
        fullnameField = new TextField("Fullname", "Some User");
        eMailField = new TextField("EMail", "user@some.de");
        roles = new TextField("Roles", "user");

        FormLayout userCardContent = new FormLayout(usernameField, passwordField, fullnameField, eMailField, roles);
        userCardContent.addStyleName(ValoTheme.FORMLAYOUT_LIGHT);
        userCardContent.setMargin(true);

        return userCardContent;
    }

    public void loadAppUser(AppUser user) {
        this.appUser = user;
        setUserFields();

        usernameField.addBlurListener(new FieldEvents.BlurListener() {

            @Override
            public void blur(FieldEvents.BlurEvent event) {
                if (!appUser.getUsername().equals(usernameField.getValue())) {
                    appUser.setUsername(usernameField.getValue());
                    updateUser();
                }
            }
        });

        passwordField.addBlurListener(new FieldEvents.BlurListener() {

            @Override
            public void blur(FieldEvents.BlurEvent event) {
                if (!passwordField.getValue().equals("nopeNopeNope")) {
                    presenter.updatePassword(appUser, passwordField.getValue());
                    updateUser();
                }
            }
        });
        fullnameField.setNullRepresentation("");
        fullnameField.addBlurListener(new FieldEvents.BlurListener() {

            @Override
            public void blur(FieldEvents.BlurEvent event) {
                if (appUser.getFullname() == null || !appUser.getFullname().equals(fullnameField.getValue())) {
                    appUser.setFullname(fullnameField.getValue());
                    updateUser();
                }
            }
        });
        eMailField.setNullRepresentation("");
        eMailField.addBlurListener(new FieldEvents.BlurListener() {

            @Override
            public void blur(FieldEvents.BlurEvent event) {
                if (appUser.geteMail() == null || !appUser.geteMail().equals(eMailField.getValue())) {
                    appUser.seteMail(eMailField.getValue());
                    updateUser();
                }
            }
        });
        roles.setNullRepresentation("");
        roles.addBlurListener(new FieldEvents.BlurListener() {

            @Override
            public void blur(FieldEvents.BlurEvent event) {
                if (appUser.getRoles() == null || !appUser.getRoles().equals(roles.getValue())) {
                    appUser.setRoles(roles.getValue());
                    updateUser();
                }
            }
        });

    }

    private void setUserFields() {
        usernameField.setValue(appUser.getUsername());

        fullnameField.setValue(appUser.getFullname());
        passwordField.setValue("nopeNopeNope");
        eMailField.setValue(appUser.geteMail());
        roles.setValue(appUser.getRoles());
        captionLabel.setValue(appUser.getUsername());
    }

    protected void updateUser() {
        appUser = presenter.updateUser(appUser);
        setUserFields();
    }

    public void addAppUserCardListener(Listener listener) {
        listeners.add(listener);
    }

    public interface Listener {
        void userDeleted(AppUserCard appUserCard);
    }
}