org.fossa.rolp.ui.dashboard.AdminDashboard.java Source code

Java tutorial

Introduction

Here is the source code for org.fossa.rolp.ui.dashboard.AdminDashboard.java

Source

/**
 * Copyright (c) 2013, 2014 Frank Kaddereit, Anne Lachnitt, http://www.fossa.de/
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */

package org.fossa.rolp.ui.dashboard;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.Date;

import org.fossa.rolp.RolpApplication;
import org.fossa.rolp.data.klasse.KlasseContainer;
import org.fossa.rolp.data.klasse.KlasseLaso;
import org.fossa.rolp.data.leb.LebSettingsContainer;
import org.fossa.rolp.data.leb.LebSettingsLaso;
import org.fossa.rolp.data.lehrer.LehrerContainer;
import org.fossa.rolp.data.lehrer.LehrerLaso;
import org.fossa.rolp.data.schueler.SchuelerContainer;
import org.fossa.rolp.data.schueler.SchuelerLaso;
import org.fossa.rolp.ui.fach.fachdefinition.FachdefinitionlisteAnzeigen;
import org.fossa.rolp.ui.klasse.KlassenlehrerZuordnen;
import org.fossa.rolp.ui.klasse.klasseanlegen.KlassenlisteAnzeigen;
import org.fossa.rolp.ui.leb.LebSettingsAnlegen;
import org.fossa.rolp.ui.lehrer.LehrerAnlegen;
import org.fossa.rolp.ui.lehrer.LehrerList;
import org.fossa.rolp.util.Config;
import org.fossa.rolp.util.LebCreator;
import org.fossa.rolp.util.UpgradeUtils;
import org.fossa.rolp.util.ZipHandler;
import org.fossa.vaadin.auth.data.FossaUserContainer;
import org.fossa.vaadin.auth.data.FossaUserLaso;
import org.fossa.vaadin.ui.FossaBooleanDialog;
import org.fossa.vaadin.ui.FossaWindow;
import org.fossa.vaadin.ui.exception.FossaLasoLockedException;

import com.vaadin.terminal.FileResource;
import com.vaadin.terminal.Sizeable;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.CustomLayout;
import com.vaadin.ui.Window;
import com.vaadin.ui.Window.CloseEvent;
import com.vaadin.ui.Window.CloseListener;
import com.vaadin.ui.Window.Notification;

public class AdminDashboard extends CustomLayout implements Button.ClickListener, CloseListener {

    private static final long serialVersionUID = -6232766368970823202L;

    public RolpApplication app;

    private FossaBooleanDialog confirmUpgrade;

    private Button lehrerAnlegenButton = new Button("Lehrer anlegen", (ClickListener) this);
    private Button lehrerBearbeitenButton = new Button("Lehrer bearbeiten", (ClickListener) this);
    private Button klassenlehrerZuweisenButton = new Button("Klassenlehrer zuweisen", (ClickListener) this);
    private Button klasseVerwaltenButton = new Button("Klassen verwalten", (ClickListener) this);
    private Button lebSettingsButton = new Button("Einstellungen", (ClickListener) this);
    private Button faecherDefinierenButton = new Button("Fcher definieren", (ClickListener) this);
    private Button lebArchivierungButton = new Button("LEB-Archivierung", (ClickListener) this);
    private Button upgradeButton = new Button("Systemupgrade", (ClickListener) this);
    private CustomLayout horizontalButtonBattery = new CustomLayout(
            "./applicationMainLayout/adminHorizontalButtonBattery");
    private CustomLayout verticalButtonBattery = new CustomLayout(
            "./applicationMainLayout/adminVerticalButtonBattery");

    private LehrerList lehrerList;

    public AdminDashboard(RolpApplication app) {
        super("./applicationMainLayout/adminLayout");
        this.app = app;

        buildButtonBattery();

        CustomLayout lehrerListe = new CustomLayout("./lehrerDashboards/liste");
        lehrerListe.addStyleName("liste");

        lehrerListe.addComponent(getLehrerList(), "list");
        lehrerListe.setHeight("260px");

        addComponent(lehrerListe, "liste");
        addComponent(horizontalButtonBattery, "horizontalButtonBattery");
        addComponent(verticalButtonBattery, "verticalButtonBattery");
    }

    private void buildButtonBattery() {
        lehrerAnlegenButton.setWidth(95, Sizeable.UNITS_PERCENTAGE);
        lehrerBearbeitenButton.setWidth(95, Sizeable.UNITS_PERCENTAGE);
        lebSettingsButton.setWidth(95, Sizeable.UNITS_PERCENTAGE);
        lebArchivierungButton.setWidth(95, Sizeable.UNITS_PERCENTAGE);
        klassenlehrerZuweisenButton.setWidth(95, Sizeable.UNITS_PERCENTAGE);
        klasseVerwaltenButton.setWidth(95, Sizeable.UNITS_PERCENTAGE);
        faecherDefinierenButton.setWidth(95, Sizeable.UNITS_PERCENTAGE);
        upgradeButton.setWidth(95, Sizeable.UNITS_PERCENTAGE);
        upgradeButton.setEnabled(LebSettingsContainer.getLebSettings().getZeugnisausgabedatum() != null
                && new Date().after(LebSettingsContainer.getLebSettings().getZeugnisausgabedatum()));
        horizontalButtonBattery.removeAllComponents();
        horizontalButtonBattery.addComponent(lehrerAnlegenButton, "lehrerAnlegenButton");
        horizontalButtonBattery.addComponent(lehrerBearbeitenButton, "lehrerBearbeitenButton");
        horizontalButtonBattery.addComponent(klassenlehrerZuweisenButton, "klassenlehrerZuweisenButton");
        horizontalButtonBattery.addComponent(klasseVerwaltenButton, "klasseVerwaltenButton");

        verticalButtonBattery.removeAllComponents();
        verticalButtonBattery.addComponent(lebSettingsButton, "lebSettingsButton");
        verticalButtonBattery.addComponent(faecherDefinierenButton, "faecherDefinierenButton");
        verticalButtonBattery.addComponent(lebArchivierungButton, "zipDownloadButton");
        verticalButtonBattery.addComponent(upgradeButton, "upgradeButton");
    }

    @Override
    public void buttonClick(ClickEvent event) {
        final Button source = event.getButton();
        if (source == lehrerAnlegenButton) {
            openSubwindow(getLehrerAnlegen(null));
        } else if (source == lehrerBearbeitenButton) {
            if (getLehrerList().getValue() == null) {
                app.getMainWindow().showNotification("kein Lehrer ausgewhlt");
                return;
            }
            LehrerLaso lehrer = (LehrerLaso) getLehrerList().getValue();
            openSubwindow(getLehrerAnlegen(lehrer));
        } else if (source == klassenlehrerZuweisenButton) {
            try {
                openSubwindow(getKlassenlehrerZuweisen());
            } catch (FossaLasoLockedException e) {
                getWindow().showNotification("LOCKED");
                return;
            }
        } else if (source == klasseVerwaltenButton) {
            getKlassenlisteAnzeigen();
        } else if (source == lebSettingsButton) {
            openSubwindow(getLebSettingsAnlegen(LebSettingsContainer.getLebSettings()));
        } else if (source == faecherDefinierenButton) {
            openSubwindow(getFachdefinitionenlisteAnzeigen());
        } else if (source == upgradeButton) {
            confirmUpgrade = new FossaBooleanDialog(app, " - Besttigung - ",
                    "Wenn Sie das Systemupgrade durchfhren, werden alle Zuordnungen, alle Fcher bzw. Kurse und alle Bestandteile der LEBs dauerhaft entfernt. Mchten Sie das Upgrade dennoch durchfhren?",
                    "Ja", "Nein");
            confirmUpgrade.addListener((CloseListener) this);
            openSubwindow(confirmUpgrade);
        } else if (source == lebArchivierungButton) {
            for (FossaUserLaso user : FossaUserContainer.getInstance().getItemIds()) {
                if (user.isLocked() && LehrerContainer.getLehrerByUser(user).getPojo().getIsAdmin()
                        && !app.getLoginLehrer().getUser().getId().equals(user.getId())) {
                    app.getMainWindow().showNotification(
                            "Die LEB-Archivierung kann nicht ausgefhrt werden, solange mehrere Administratoren angemeldet sind.");
                    return;
                }
            }
            try {
                File zipFile = new File(Config.getLocalTempPath() + "LEBs.zip");
                zipFile.delete();
                ZipHandler zipHandler = new ZipHandler(zipFile.getAbsolutePath());
                for (KlasseLaso klasse : KlasseContainer.getInstance().getItemIds()) {
                    for (SchuelerLaso schueler : SchuelerContainer.getAllSchuelerOfKlasse(klasse.getPojo())
                            .getItemIds()) {
                        String dateiname = "Klasse" + klasse.getKlassenname() + "_" + schueler.getVorname() + "_"
                                + schueler.getName() + ".pdf";
                        LebCreator lebCreator = new LebCreator(app, schueler, klasse, dateiname);
                        System.out.println(lebCreator.getLebFilename());
                        File lebFile = new File(Config.getLocalTempPath() + lebCreator.getLebFilename());
                        System.out.println(lebFile.getAbsolutePath());
                        lebFile.createNewFile();
                        OutputStream outputStream = new FileOutputStream(lebFile);
                        lebCreator.getPdfOutputStream().writeTo(outputStream);
                        outputStream.close();
                        zipHandler.addFile(lebFile.getAbsolutePath());
                    }
                }
                zipHandler.finalizeZipFile();
                for (File file : zipHandler.getFiles()) {
                    file.delete();
                }
                FileResource zipFileresource = new FileResource(zipFile, app);
                app.getMainWindow().open(zipFileresource);

            } catch (Exception e) {
                app.getMainWindow().showNotification("Fehler bei der LEB-Archivierung",
                        Notification.TYPE_ERROR_MESSAGE);
                e.printStackTrace();
            }

        }
    }

    private FachdefinitionlisteAnzeigen getFachdefinitionenlisteAnzeigen() {
        return new FachdefinitionlisteAnzeigen(app);
    }

    private KlassenlehrerZuordnen getKlassenlehrerZuweisen() throws FossaLasoLockedException {
        return new KlassenlehrerZuordnen(app);
    }

    private LehrerList getLehrerList() {
        if (lehrerList == null) {
            lehrerList = new LehrerList(app);
            lehrerList.setHeight("250px");
            lehrerList.setStyleName("list");
        }
        return lehrerList;
    }

    private LebSettingsAnlegen getLebSettingsAnlegen(LebSettingsLaso lebSettings) {
        return new LebSettingsAnlegen(app, lebSettings);
    }

    private LehrerAnlegen getLehrerAnlegen(LehrerLaso lehrer) {
        if (lehrer == null) {
            lehrer = new LehrerLaso();
        }
        return new LehrerAnlegen(app, lehrer);
    }

    private void getKlassenlisteAnzeigen() {
        app.getMainWindow().addWindow(new KlassenlisteAnzeigen(app));
    }

    @Override
    public void windowClose(CloseEvent event) {
        Window source = event.getWindow();
        if (source == confirmUpgrade) {
            if (confirmUpgrade.getDecision()) {
                try {
                    UpgradeUtils.doSystemUpgrade(app, this,
                            getLebSettingsAnlegen(LebSettingsContainer.getLebSettings()));
                } catch (Exception e) {
                    e.printStackTrace();
                    app.getMainWindow().showNotification(
                            "Fehler beim Lschen! Bitte wenden Sie sich an den Administrator!",
                            Notification.TYPE_ERROR_MESSAGE);
                }
            }
        }
    }

    protected void openSubwindow(FossaWindow window) {
        app.getMainWindow().addWindow(window);
    }

    public void refreshPage() {
        getLehrerList().refresh();
        buildButtonBattery();
    }
}