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

Java tutorial

Introduction

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

Source

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

}