net.sf.sze.frontend.zeugnis.AvSvBewertungController.java Source code

Java tutorial

Introduction

Here is the source code for net.sf.sze.frontend.zeugnis.AvSvBewertungController.java

Source

//AvSvController.java
//
// Licensed under the AGPL - http://www.gnu.org/licenses/agpl-3.0.txt
// (c) SZE-Development Team
package net.sf.sze.frontend.zeugnis;

import java.util.Collections;
import java.util.List;

import javax.annotation.Resource;

import net.sf.oval.constraint.AssertValid;
import net.sf.sze.frontend.base.URL;
import net.sf.sze.frontend.base.URL.Common;
import net.sf.sze.model.stammdaten.Schueler;
import net.sf.sze.model.zeugnis.AvSvBewertung;
import net.sf.sze.model.zeugnis.Zeugnis;
import net.sf.sze.model.zeugnis.ZeugnisFormular;
import net.sf.sze.model.zeugnisconfig.AvSvNote;
import net.sf.sze.service.api.stammdaten.SchuelerList;
import net.sf.sze.service.api.stammdaten.SchuelerService;
import net.sf.sze.service.api.zeugnis.AvSvBewertungService;
import net.sf.sze.service.api.zeugnis.ZeugnisErfassungsService;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.Validator;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * Controller zum Bearbeiten der AvSvBewertung.
 *
 */
@Controller
public class AvSvBewertungController {

    /**
     * Der {@link ZeugnisErfassungsService}.
     */
    @Resource
    private ZeugnisErfassungsService zeugnisErfassungsService;

    /**
     * Der {@link AvSvBewertungService}.
     */
    @Resource
    private AvSvBewertungService avSvBewertungService;

    @Resource
    private SchuelerService schuelerService;

    /**
     * Der Validator.
     */
    @Resource
    private Validator validator;

    private static final String EDIT_ZEUGNIS_AV_SV_VIEW = "avSvBewertung/editAvSvBewertungen";

    /**
     * Zeigt die AG-Bewertungen an.
     * @param halbjahrId die Id des Schulhalbjahres
     * @param klassenId die Id der Klasse
     * @param schuelerId die Id des Schuelers
     * @param model das Model
     * @return die logische View
     */
    @RequestMapping(value = URL.ZeugnisPath.ZEUGNIS_EDIT_AV_SV, method = RequestMethod.GET)
    public String editArbeitsgruppen(@PathVariable(URL.Session.P_HALBJAHR_ID) Long halbjahrId,
            @PathVariable(URL.Session.P_KLASSEN_ID) Long klassenId,
            @PathVariable(URL.Session.P_SCHUELER_ID) Long schuelerId, Model model) {
        final Zeugnis zeugnis = zeugnisErfassungsService.getZeugnis(halbjahrId, schuelerId);
        final SchuelerList schuelerList = schuelerService.getSchuelerWithZeugnis(halbjahrId.longValue(),
                klassenId.longValue(), schuelerId);
        final AvSvForm avSvForm = new AvSvForm(zeugnis.getAvSvBewertungen(), zeugnis.getSchueler(),
                zeugnis.getFormular());
        Collections.sort(avSvForm.getAvSvBewertungen());
        fillModel(model, avSvForm, halbjahrId, klassenId, schuelerId, schuelerList.getPrevSchuelerId(),
                schuelerList.getNextSchuelerId());
        return EDIT_ZEUGNIS_AV_SV_VIEW;
    }

    /**
     * @param model
     * @param avSvForm
     */
    private void fillModel(Model model, AvSvForm avSvForm, Long halbjahrId, Long klassenId, Long schuelerId,
            Long prevId, Long nextId) {

        model.addAttribute("avSvForm", avSvForm);
        model.addAttribute("noten", AvSvNote.values());
        model.addAttribute("updateUrl",
                URL.filledURLWithNamedParams(URL.ZeugnisPath.ZEUGNIS_EDIT_AV_SV, URL.Session.P_HALBJAHR_ID,
                        halbjahrId, URL.Session.P_KLASSEN_ID, klassenId, URL.Session.P_SCHUELER_ID, schuelerId));
        model.addAttribute(Common.P_PREV_ID, prevId);
        model.addAttribute(Common.P_NEXT_ID, nextId);
        model.addAttribute("cancelUrl", URL.createLinkToZeugnisUrl(halbjahrId, klassenId, schuelerId));
    }

    /**
     * Speichert die neu angelegte AG-Bewertungen.
     * @param halbjahrId die Id des Schulhalbjahres
     * @param klassenId die Id der Klasse
     * @param schuelerId die Id des Schuelers
     * @param action String der angibt was zu tun ist.
     * @param prevId die Id des vorherigen Schlers
     * @param nextId die Id des nachfolgenden Schlers
     * @param avSvForm Datencontainer fr die AvSv-Daten.
     * @param result das Bindingresult.
     * @param model das Model
     * @return die logische View
     */
    @RequestMapping(value = URL.ZeugnisPath.ZEUGNIS_EDIT_AV_SV, method = RequestMethod.POST)
    public String updateArbeitsgruppen(@PathVariable(URL.Session.P_HALBJAHR_ID) Long halbjahrId,
            @PathVariable(URL.Session.P_KLASSEN_ID) Long klassenId,
            @PathVariable(URL.Session.P_SCHUELER_ID) Long schuelerId, @RequestParam(Common.P_PREV_ID) Long prevId,
            @RequestParam(Common.P_NEXT_ID) Long nextId,
            @RequestParam(value = Common.P_ACTION, required = false) String action,
            @ModelAttribute("avSvForm") AvSvForm avSvForm, BindingResult result, Model model) {
        validator.validate(avSvForm, result);
        //Die Validierung kann eigentlich nicht schiefgehen. Auerdem bekommt
        //man nur einen "Field error in object 'avSvForm' on field 'avSvBewertungen'"
        //Man bruchte aber avSvBwertungen[0].beurteilung
        if (result.hasErrors()) {
            fillModel(model, avSvForm, halbjahrId, klassenId, schuelerId, prevId, nextId);
            return EDIT_ZEUGNIS_AV_SV_VIEW;
        }

        avSvBewertungService.save(avSvForm.getAvSvBewertungen());
        return URL.getPrevNextUrlOrZeugnisUrl(action, URL.ZeugnisPath.ZEUGNIS_EDIT_AV_SV, halbjahrId, klassenId,
                schuelerId, prevId, nextId);
    }

    /**
     * Container fr die AvSv-Daten.
     *
     */
    public static class AvSvForm {
        @AssertValid
        private List<AvSvBewertung> avSvBewertungen;

        private Schueler schueler;
        private ZeugnisFormular formular;

        /**
         * Initiates an object of type AvSvForm.
         */
        public AvSvForm() {

        }

        /**
         * Initiates an object of type AvSvForm.
         * @param avSvBewertungen die Bewertungen.
         * @param schueler der Schler
         * @param formular das Zeugnisformular.
         */
        public AvSvForm(List<AvSvBewertung> avSvBewertungen, Schueler schueler, ZeugnisFormular formular) {
            super();
            this.avSvBewertungen = avSvBewertungen;
            this.schueler = schueler;
            this.formular = formular;
        }

        /**
         * @return the avSvBewertungen
         */
        public List<AvSvBewertung> getAvSvBewertungen() {
            return avSvBewertungen;
        }

        /**
         * @param avSvBewertungen the avSvBewertungen to set
         */
        public void setAvSvBewertungen(List<AvSvBewertung> avSvBewertungen) {
            this.avSvBewertungen = avSvBewertungen;
        }

        /**
         * @return the schueler
         */
        public Schueler getSchueler() {
            return schueler;
        }

        /**
         * @param schueler the schueler to set
         */
        public void setSchueler(Schueler schueler) {
            this.schueler = schueler;
        }

        /**
         * @return the formular
         */
        public ZeugnisFormular getFormular() {
            return formular;
        }

        /**
         * @param formular the formular to set
         */
        public void setFormular(ZeugnisFormular formular) {
            this.formular = formular;
        }

    }

}