/* * Copyright (c) 2015 Felix Husse under MIT License * see LICENSE file */ package de.fatalix.bookery.view.admin; import com.vaadin.cdi.CDIView; import com.vaadin.event.LayoutEvents; import com.vaadin.navigator.ViewChangeListener; import com.vaadin.server.FontAwesome; import com.vaadin.ui.Alignment; import com.vaadin.ui.Button; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Label; import com.vaadin.ui.Notification; import com.vaadin.ui.TabSheet; import com.vaadin.ui.TextField; import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.themes.ValoTheme; import de.fatalix.bookery.bl.model.AppUser; import de.fatalix.bookery.view.common.AbstractView; import java.io.IOException; import java.util.List; import javax.annotation.PostConstruct; import javax.annotation.security.RolesAllowed; import javax.enterprise.inject.Instance; import javax.inject.Inject; import javax.mail.MessagingException; import org.apache.solr.client.solrj.SolrServerException; import org.vaadin.cdiviewmenu.ViewMenuItem; /** * * @author felix.husse */ @CDIView(AdminView.id) @RolesAllowed({"admin"}) @ViewMenuItem(title = "Admin", icon = FontAwesome.GEARS, order = ViewMenuItem.END) public class AdminView extends AbstractView implements AppUserCard.Listener { public static final String id = "admin"; @Inject private AdminPresenter presenter; @Inject private Instance<AppUserCard> appUserCardInstances; @Inject private ServerSettingsLayout serverSettingsLayout; @Inject private BatchJobsLayout batchJobsLayout; private HorizontalLayout userManagementLayout; @PostConstruct private void postInit() { TabSheet tabSheet = new TabSheet(); tabSheet.setStyleName("admin-screen"); tabSheet.addTab(createServerSettings(), "Server Settings"); tabSheet.addTab(createUserManagement(), "User Management"); tabSheet.addTab(batchJobsLayout, "Batch Jobs"); this.setCompositionRoot(tabSheet); } @Override public void enter(ViewChangeListener.ViewChangeEvent event) { serverSettingsLayout.loadData(); batchJobsLayout.enter(); loadUser(); } private void loadUser() { List<AppUser> userList = presenter.loadUserList(); for (AppUser appUser : userList) { AppUserCard appUserCard = appUserCardInstances.get(); appUserCard.loadAppUser(appUser); appUserCard.addAppUserCardListener(this); userManagementLayout.addComponent(appUserCard, userManagementLayout.getComponentCount() - 1); } } public HorizontalLayout createUserManagement() { userManagementLayout = new HorizontalLayout(); userManagementLayout.addStyleName("wrapping"); userManagementLayout.setSpacing(true); userManagementLayout.setMargin(true); Label label = new Label("Add new user..."); label.setSizeUndefined(); label.addStyleName(ValoTheme.LABEL_LARGE); VerticalLayout emptyLayout = new VerticalLayout(label); emptyLayout.addStyleName("dashed-border"); emptyLayout.setWidth(380, Unit.PIXELS); emptyLayout.setHeight(220, Unit.PIXELS); emptyLayout.setComponentAlignment(label, Alignment.MIDDLE_CENTER); emptyLayout.addLayoutClickListener(new LayoutEvents.LayoutClickListener() { @Override public void layoutClick(LayoutEvents.LayoutClickEvent event) { AppUser appUser = presenter.createNewUser(); AppUserCard appUserCard = appUserCardInstances.get(); appUserCard.loadAppUser(appUser); appUserCard.addAppUserCardListener(AdminView.this); userManagementLayout.addComponent(appUserCard, userManagementLayout.getComponentCount() - 1); } }); userManagementLayout.addComponent(emptyLayout); return userManagementLayout; } public VerticalLayout createServerSettings() { VerticalLayout layout = new VerticalLayout(); layout.setMargin(true); Label titleLabel = new Label("General Settings"); titleLabel.addStyleName(ValoTheme.LABEL_H2); //layout.addComponent(titleLabel); layout.addComponent(serverSettingsLayout); Button resetIndex = new Button("reset Index", new Button.ClickListener() { @Override public void buttonClick(Button.ClickEvent event) { try { presenter.resetIndex(); Notification.show("Succesfully reset Index", Notification.Type.HUMANIZED_MESSAGE); } catch (IOException | SolrServerException ex) { Notification.show(ex.getMessage(), Notification.Type.ERROR_MESSAGE); } } }); resetIndex.addStyleName(ValoTheme.BUTTON_DANGER); final TextField eMailAdress = new TextField(null, "felix.husse@medavis.de"); eMailAdress.setColumns(35); Button testMail = new Button("Test Mail", new Button.ClickListener() { @Override public void buttonClick(Button.ClickEvent event) { try { presenter.sendEmail(eMailAdress.getValue()); Notification.show("Mail succesfully sent!", Notification.Type.HUMANIZED_MESSAGE); } catch (MessagingException ex) { Notification.show("Mail failed!" + ex.getMessage(), Notification.Type.ERROR_MESSAGE); } } }); testMail.setEnabled(true); Button resetBatchJobs = new Button("reset BatchJobs", new Button.ClickListener() { @Override public void buttonClick(Button.ClickEvent event) { presenter.resetBatchJobs(); Notification.show("Succesfully reset Batchjobs", Notification.Type.HUMANIZED_MESSAGE); } }); resetBatchJobs.addStyleName(ValoTheme.BUTTON_DANGER); HorizontalLayout mailLayout = new HorizontalLayout(eMailAdress, testMail, resetBatchJobs); layout.addComponents(resetIndex, mailLayout); return layout; } @Override public void userDeleted(AppUserCard appUserCard) { userManagementLayout.removeComponent(appUserCard); } }