/* * 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); } }