Java tutorial
/** * 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.IOException; import org.fossa.rolp.RolpApplication; import org.fossa.rolp.data.einschaetzung.EinschaetzungLaso; 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.schueler.SchuelerContainer; import org.fossa.rolp.data.schueler.SchuelerLaso; import org.fossa.rolp.data.zuordnung.fachschueler.ZuordnungFachSchuelerContainer; import org.fossa.rolp.ui.einschaetzung.EinschaetzungAnlegen; import org.fossa.rolp.ui.fach.KurseZuordnen; import org.fossa.rolp.ui.fach.PflichtfaecherlisteAnzeigen; import org.fossa.rolp.ui.klasse.klasseanlegen.KlasseAnlegen; import org.fossa.rolp.ui.leb.LebAnzeigen; import org.fossa.rolp.ui.schueler.SchuelerList; import org.fossa.rolp.ui.schueler.SchuelerlisteAnzeigen; import org.fossa.rolp.ui.schueler.versetzungsvermerk.VersetzungsvermerklisteAnzeigen; import org.fossa.rolp.ui.zuordnung.fachschueler.SchuelerfachList; import org.fossa.rolp.ui.zuordnung.fachschueler.SchuelerfachlisteAnzeigen; import org.fossa.rolp.util.HintUtils; import org.fossa.vaadin.ui.FossaBooleanCellImageHandler; import org.fossa.vaadin.ui.FossaWindow; import org.fossa.vaadin.ui.exception.FossaLasoLockedException; import com.itextpdf.text.DocumentException; import com.vaadin.event.ItemClickEvent; import com.vaadin.event.ItemClickEvent.ItemClickListener; import com.vaadin.terminal.Sizeable; import com.vaadin.terminal.ThemeResource; 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.Embedded; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Label; import com.vaadin.ui.Panel; import com.vaadin.ui.TextField; public class KlassenlehrerDashboard extends FossaWindow implements Button.ClickListener, ItemClickListener { private static final long serialVersionUID = -6514418795515349474L; private Button schuelerlisteBearbeitenButton = new Button("Schlerliste bearbeiten", (ClickListener) this); private Button klasseAnlegenButton = new Button("neue Klasse anlegen", (ClickListener) this); private Button faecherFestlegenButton = new Button("Fcher bearbeiten", (ClickListener) this); private Button kurseZuorndnenButton = new Button("Kurse zuordnen", (ClickListener) this); private Button individuelleEinschaetzungButton = new Button("individuelle Einschtzung", (ClickListener) this); private Button klassenBriefVerfassenButton = new Button("Klassenbrief", (ClickListener) this); private Button facheinschaetzungButton = new Button("Facheinschtzungen", (ClickListener) this); private Button lebErstellenButton = new Button("LEB erstellen", (ClickListener) this); private Button windowCloseButton = new Button("Fenster schlieen", (ClickListener) this); private Button versetzungsvermerkButton = new Button("Versetzungsvermerke", (ClickListener) this); private TextField klasseLabel; private TextField klassenTypLabel; private TextField zeugnisausgabeLabel; private TextField halbjahrLabel; private Label hinweistext; private SchuelerlisteAnzeigen schuelerliste; private VersetzungsvermerklisteAnzeigen versetzungsvermerkliste; private KlasseAnlegen klasseAnlegen; private PflichtfaecherlisteAnzeigen faecherfestlegen; private RolpApplication app; private EinschaetzungAnlegen einschaetzungAnlegen; private KurseZuordnen kurseZuordnen; private SchuelerList schuelerList = null; private SchuelerfachlisteAnzeigen schuelerfachlisteAnzeigen; private CustomLayout horizontalButtonBattery = new CustomLayout( "./lehrerDashboards/klassenlehrerHorizontalButtonBattery"); private CustomLayout verticalButtonBattery = new CustomLayout( "./lehrerDashboards/klassenlehrerVerticalButtonBattery"); private CustomLayout headdataEditingPanel = new CustomLayout("./lehrerDashboards/headdataEditingPanel"); private FossaBooleanCellImageHandler klasseneinschaetzungVorhandenHook; private static final String MAINPAGE_PANEL_ANMELDEN_LOGO_PATH = "images/rolp_logo.png"; public KlassenlehrerDashboard(RolpApplication app) { super(app); this.app = app; setCaption(" - KlassenlehrerDashboard - "); setWidth("100%"); setHeight("100%"); buildButtonBatteries(); CustomLayout layout = new CustomLayout("./lehrerDashboards/klassenLehrerDashboardMain"); setContent(layout); CustomLayout headline = new CustomLayout("./lehrerDashboards/headline"); headline.addStyleName("headline"); Embedded logo = new Embedded(null, new ThemeResource(MAINPAGE_PANEL_ANMELDEN_LOGO_PATH)); logo.setType(Embedded.TYPE_IMAGE); logo.setWidth("100px"); logo.setHeight("96px"); headline.addComponent(logo, "logo"); headline.addComponent(headdataEditingPanel, "headdataEditingPanel"); Panel hints = new Panel(); hints.addStyleName("hints"); hinweistext = new Label(); hinweistext.setContentMode(Label.CONTENT_XHTML); hinweistext.setReadOnly(true); hinweistext.setHeight("250px"); hints.setHeight("250px"); hints.setScrollable(true); hints.addComponent(hinweistext); refreshHinweistext(); CustomLayout schuelerListe = new CustomLayout("./lehrerDashboards/liste"); schuelerListe.addStyleName("liste"); schuelerList = getSchuelerList(); schuelerList.setHeight("250px"); schuelerList.setStyleName("list"); schuelerListe.addComponent(schuelerList, "list"); schuelerListe.setHeight("260px"); layout.addComponent(schuelerListe, "liste"); layout.addComponent(headline, "headline"); layout.addComponent(horizontalButtonBattery, "horizontalButtonBattery"); layout.addComponent(verticalButtonBattery, "verticalButtonBattery"); layout.addComponent(hints, "hints"); windowCloseButton.setWidth("100%"); layout.addComponent(windowCloseButton, "windowCloseButton"); // app.getAnimator().animate(horizontalButtonBattery, AnimType.ROLL_DOWN_OPEN_POP).setDuration(500).setDelay(500); } private void refreshHinweistext() { hinweistext.setReadOnly(false); hinweistext.setValue(getHinweistext()); hinweistext.setReadOnly(true); } private String getHinweistext() { String hinweisCollection = ""; KlasseLaso klasse = KlasseContainer.getKlasseByLehrer(app.getLoginLehrer()); if (klasse != null) { if (ZuordnungFachSchuelerContainer.getAllPflichtfaecherOfKlasse(klasse.getPojo()).size() == 0) { hinweisCollection = hinweisCollection + HintUtils.createHinweistextKlasseKeinePflichtfaecher( ZuordnungFachSchuelerContainer.getAllPflichtfaecherOfKlasse(klasse.getPojo()), klasse.getPojo()); } for (SchuelerLaso schueler : SchuelerContainer.getAllSchuelerOfKlasse(klasse.getPojo()).getItemIds()) { hinweisCollection = hinweisCollection + HintUtils.createHinweistextSchuelerKeineKurse( ZuordnungFachSchuelerContainer.getInstance(), schueler); } return hinweisCollection; } else { hinweisCollection = hinweisCollection + HintUtils.HEADER_WARNING + "Keine Klasse angelegt"; } return hinweisCollection; } private void buildButtonBatteries() { horizontalButtonBattery.removeAllComponents(); horizontalButtonBattery.addStyleName("horizontalButtonBattery"); KlasseLaso klasse = KlasseContainer.getKlasseByLehrer(app.getLoginLehrer()); headdataEditingPanel.addComponent(klasseAnlegenButton, "klasseAnlegenButton"); horizontalButtonBattery.addComponent(schuelerlisteBearbeitenButton, "schuelerlisteBearbeitenButton"); horizontalButtonBattery.addComponent(faecherFestlegenButton, "faecherFestlegenButton"); horizontalButtonBattery.addComponent(kurseZuorndnenButton, "kurseZuordnenButton"); schuelerlisteBearbeitenButton.setWidth(85, Sizeable.UNITS_PERCENTAGE); faecherFestlegenButton.setWidth(85, Sizeable.UNITS_PERCENTAGE); kurseZuorndnenButton.setWidth(85, Sizeable.UNITS_PERCENTAGE); verticalButtonBattery.removeAllComponents(); verticalButtonBattery.addStyleName("verticalButtonBattery"); individuelleEinschaetzungButton.setWidth(95, Sizeable.UNITS_PERCENTAGE); verticalButtonBattery.addComponent(individuelleEinschaetzungButton, "individuelleEinschaetzungButton"); klassenBriefVerfassenButton.setWidth(95, Sizeable.UNITS_PERCENTAGE); verticalButtonBattery.addComponent(klassenBriefVerfassenButton, "klassenBriefVerfassenButton"); facheinschaetzungButton.setEnabled(false); facheinschaetzungButton.setWidth(95, Sizeable.UNITS_PERCENTAGE); verticalButtonBattery.addComponent(facheinschaetzungButton, "facheinschaetzungButton"); lebErstellenButton.setEnabled(true); lebErstellenButton.setWidth(95, Sizeable.UNITS_PERCENTAGE); verticalButtonBattery.addComponent(lebErstellenButton, "lebErstellenButton"); activateButtons(klasse != null); if (klasse != null) { klasseAnlegenButton.setCaption("Klassenkopf bearbeiten"); if (SchuelerContainer.getAllSchuelerOfKlasse(klasse.getPojo()).size() == 0) { faecherFestlegenButton.setEnabled(false); } buildKlassenkopfdaten(klasse); if (LebSettingsContainer.getLebSettings().getHalbjahr().isZweitesHalbjahr()) { versetzungsvermerkButton.setWidth(95, Sizeable.UNITS_PERCENTAGE); verticalButtonBattery.addComponent(versetzungsvermerkButton, "versetzungsvermerkButton"); } } } private void buildKlassenkopfdaten(KlasseLaso klasse) { headdataEditingPanel.removeAllComponents(); headdataEditingPanel.addStyleName("headdataEditingPanel"); klasseAnlegenButton.setWidth(35, Sizeable.UNITS_PERCENTAGE); headdataEditingPanel.addComponent(klasseAnlegenButton, "klasseAnlegenButton"); klasseLabel = new TextField("Klasse " + klasse.getKlassenname()); klasseLabel.setReadOnly(true); klasseLabel.addStyleName("klasseLabel"); headdataEditingPanel.addComponent(klasseLabel, "klasseLabel"); klassenTypLabel = new TextField("Klassentyp: " + klasse.getKlassentypString()); klassenTypLabel.setReadOnly(true); headdataEditingPanel.addComponent(klassenTypLabel, "klassenTypLabel"); zeugnisausgabeLabel = new TextField( "Zeugnisausgabe am " + LebSettingsContainer.getLebSettings().getZeugnisausgabedatumString()); zeugnisausgabeLabel.setReadOnly(true); headdataEditingPanel.addComponent(zeugnisausgabeLabel, "zeugnisausgabeLabel"); halbjahrLabel = new TextField(LebSettingsContainer.getLebSettings().getHalbjahrString()); halbjahrLabel.setReadOnly(true); headdataEditingPanel.addComponent(halbjahrLabel, "halbjahrLabel"); HorizontalLayout klasseneinschaetzung = new HorizontalLayout(); if (klasse.getKlasseneinschaetzung() != null && klasse.getKlasseneinschaetzung().getErledigt()) { klasseneinschaetzungVorhandenHook = new FossaBooleanCellImageHandler(true); } else { klasseneinschaetzungVorhandenHook = new FossaBooleanCellImageHandler(false); } klasseneinschaetzung.addComponent(new Label("Klassenbrief vorhanden? ")); klasseneinschaetzung.addComponent(klasseneinschaetzungVorhandenHook); headdataEditingPanel.addComponent(klasseneinschaetzung, "klasseneinschaetzung"); } private void activateButtons(boolean klasseVorhanden) { schuelerlisteBearbeitenButton.setEnabled(klasseVorhanden); faecherFestlegenButton.setEnabled(klasseVorhanden); kurseZuorndnenButton.setEnabled(klasseVorhanden); versetzungsvermerkButton.setEnabled(klasseVorhanden); individuelleEinschaetzungButton.setEnabled(klasseVorhanden); klassenBriefVerfassenButton.setEnabled(klasseVorhanden); facheinschaetzungButton.setEnabled(klasseVorhanden); lebErstellenButton.setEnabled(klasseVorhanden); } @Override public void buttonClick(ClickEvent event) { final Button source = event.getButton(); if (source == windowCloseButton) { close(); } if (source == schuelerlisteBearbeitenButton) { showSchuelerliste(); } else if (source == klasseAnlegenButton) { showKlasseAnlegen(); } else if (source == faecherFestlegenButton) { showFaecherFestlegen(); } else if (source == kurseZuorndnenButton) { showKurseZuordnen(); } else if (source == individuelleEinschaetzungButton) { showIndividuelleEinschaetzung(); } else if (source == klassenBriefVerfassenButton) { showKlassenbrief(); } else if (source == facheinschaetzungButton) { SchuelerLaso schueler = (SchuelerLaso) schuelerList.getValue(); if (schueler == null) { app.getMainWindow().showNotification("kein Schler ausgewhlt"); return; } schuelerspezifischeDetailsAnzeigen(schueler); } else if (source == lebErstellenButton) { SchuelerLaso schueler = (SchuelerLaso) schuelerList.getValue(); if (schueler == null) { showNotification("kein Schler ausgewhlt"); return; } lebErstellen(); } else if (source == versetzungsvermerkButton) { getVersetzungsvermerklisteAnzeigen(); } } private SchuelerList getSchuelerList() { if (schuelerList == null) { schuelerList = new SchuelerList(app, this, SchuelerContainer.CHECKLIST_COL_ORDER, SchuelerContainer.CHECKLIST_COL_HEADERS); } return schuelerList; } private void schuelerspezifischeDetailsAnzeigen(SchuelerLaso schueler) { getApplication().getMainWindow().addWindow(buildSchuelerfachlistAnzeigen(schueler)); } private FossaWindow buildSchuelerfachlistAnzeigen(SchuelerLaso schueler) { SchuelerfachList schuelerfachListe = getSchuelerfachList(schueler); schuelerfachlisteAnzeigen = new SchuelerfachlisteAnzeigen(app, schuelerfachListe); return schuelerfachlisteAnzeigen; } private SchuelerfachList getSchuelerfachList(SchuelerLaso schueler) { return new SchuelerfachList(app, schueler); } private void lebErstellen() { SchuelerLaso schueler = (SchuelerLaso) schuelerList.getValue(); KlasseLaso klasse = KlasseContainer.getKlasseByLehrer(app.getLoginLehrer()); try { getApplication().getMainWindow().addWindow(new LebAnzeigen(app, schueler, klasse)); } catch (DocumentException e) { getApplication().getMainWindow().showNotification("DOCUMENT!", e.getMessage(), Notification.TYPE_ERROR_MESSAGE); e.printStackTrace(); } catch (IOException e) { getApplication().getMainWindow().showNotification("DOCUMENT!", e.getMessage(), Notification.TYPE_ERROR_MESSAGE); e.printStackTrace(); } } private void showKlassenbrief() { KlasseLaso klasse = KlasseContainer.getKlasseByLehrer(app.getLoginLehrer()); EinschaetzungLaso einschaetzung = klasse.getKlasseneinschaetzung(); if (einschaetzung == null) { einschaetzung = new EinschaetzungLaso(); klasse.setKlasseneinschaetzung(einschaetzung); } try { einschaetzungAnlegen = new EinschaetzungAnlegen(app, einschaetzung, "Klassenbrief fr die Klasse " + klasse.getKlassenname(), null); } catch (FossaLasoLockedException e) { // can't happen! } getApplication().getMainWindow().addWindow(einschaetzungAnlegen); } private void showIndividuelleEinschaetzung() { SchuelerLaso schueler = (SchuelerLaso) schuelerList.getValue(); if (schueler == null) { app.getMainWindow().showNotification("kein Schler ausgewhlt"); return; } EinschaetzungLaso einschaetzung = schueler.getSchuelereinschaetzung(); if (einschaetzung == null) { einschaetzung = new EinschaetzungLaso(); schueler.setSchuelereinschaetzung(einschaetzung); } try { einschaetzungAnlegen = new EinschaetzungAnlegen(app, einschaetzung, "individuelle Einschtzung fr " + schueler.getVorname() + " " + schueler.getName(), schueler); } catch (FossaLasoLockedException e) { getWindow().showNotification("LOCKED"); return; } getApplication().getMainWindow().addWindow(einschaetzungAnlegen); } private void showKurseZuordnen() { kurseZuordnen = new KurseZuordnen(app); getApplication().getMainWindow().addWindow(kurseZuordnen); } private void showFaecherFestlegen() { faecherfestlegen = new PflichtfaecherlisteAnzeigen(app); getApplication().getMainWindow().addWindow(faecherfestlegen); } private void showKlasseAnlegen() { KlasseLaso klasse = KlasseContainer.getKlasseByLehrer(app.getLoginLehrer()); klasseAnlegen = new KlasseAnlegen(app, klasse); getApplication().getMainWindow().addWindow(klasseAnlegen); } private void getVersetzungsvermerklisteAnzeigen() { versetzungsvermerkliste = new VersetzungsvermerklisteAnzeigen(app); getApplication().getMainWindow().addWindow(versetzungsvermerkliste); } private void showSchuelerliste() { schuelerliste = new SchuelerlisteAnzeigen(app); getApplication().getMainWindow().addWindow(schuelerliste); } @Override public void unlockLaso() { } public void refreshPage() { buildButtonBatteries(); refreshHinweistext(); KlasseLaso klasseLaso = KlasseContainer.getKlasseByLehrer(app.getLoginLehrer()); if (klasseLaso != null) { getSchuelerList().refresh(klasseLaso.getPojo()); getSchuelerList().requestRepaintAll(); getSchuelerList().refreshRowCache(); buildKlassenkopfdaten(klasseLaso); } } @Override public void itemClick(ItemClickEvent event) { // TODO Auto-generated method stub } }