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

Java tutorial

Introduction

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

Source

//BemerkungController.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.List;

import javax.annotation.Resource;

import net.sf.sze.frontend.base.ModelAttributes;
import net.sf.sze.frontend.base.URL;
import net.sf.sze.frontend.base.URL.Common;
import net.sf.sze.model.zeugnis.Bemerkung;
import net.sf.sze.model.zeugnis.Zeugnis;
import net.sf.sze.model.zeugnisconfig.BemerkungsBaustein;
import net.sf.sze.service.api.zeugnis.BemerkungService;
import net.sf.sze.service.api.zeugnis.ZeugnisErfassungsService;
import net.sf.sze.service.api.zeugnisconfig.SchulhalbjahrService;

import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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 zur Erfassung der {@link Bemerkung}.
 *
 */
@Controller
public class BemerkungController implements ModelAttributes {

    /**
     * View zum Editieren der Bemerkung.
     */
    private static final String EDIT_BEMERKUNG_VIEW = "bemerkung/editBemerkung";

    /**
     * The Logger for the controller.
     */
    private static final Logger LOG = LoggerFactory.getLogger(BemerkungController.class);

    /**
     * Der {@link BemerkungService}.
     */
    @Resource
    private BemerkungService bemerkungService;

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

    /**
     * Der {@link SchulhalbjahrService}.
     */
    @Resource
    private SchulhalbjahrService schulhalbjahrService;

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

    /**
     * Zeigt die Bemerkung des entsprechenden Faches der Klasse in dem Halbjahr.
     * @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.BEMERKUNG_CREATE, method = RequestMethod.GET)
    public String createBemerkung(@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 Bemerkung bemerkung = new Bemerkung();
        bemerkung.setZeugnis(zeugnis);
        fillModel(model, halbjahrId, klassenId, schuelerId, bemerkung);
        model.addAttribute("insertUrl",
                URL.filledURLWithNamedParams(URL.ZeugnisPath.BEMERKUNG_CREATE, URL.Session.P_HALBJAHR_ID,
                        halbjahrId, URL.Session.P_KLASSEN_ID, klassenId, URL.Session.P_SCHUELER_ID, schuelerId));

        return EDIT_BEMERKUNG_VIEW;
    }

    /**
     * Speichert die neu angelegte Bemerkung.
     * @param halbjahrId die Id des Schulhalbjahres
     * @param klassenId die Id der Klasse
     * @param schuelerId die Id des Schuelers
     * @param bemerkung die zu speichernde Bemerkung.
     * @param action die als nchstes auszufhrende Aktion.
     * @param model das Model
     * @param result das Bindingresult.
     * @return die logische View
     */
    @RequestMapping(value = URL.ZeugnisPath.BEMERKUNG_CREATE, method = RequestMethod.POST)
    public String insertBemerkung(@PathVariable(URL.Session.P_HALBJAHR_ID) Long halbjahrId,
            @PathVariable(URL.Session.P_KLASSEN_ID) Long klassenId,
            @PathVariable(URL.Session.P_SCHUELER_ID) Long schuelerId,
            @ModelAttribute(BEMERKUNG) Bemerkung bemerkung,
            @RequestParam(value = URL.Common.P_ACTION, required = false) String action, BindingResult result,
            Model model) {
        validator.validate(bemerkung, result);

        if (result.hasErrors()) {
            model.addAttribute("insertUrl",
                    URL.filledURLWithNamedParams(URL.ZeugnisPath.BEMERKUNG_CREATE, URL.Session.P_HALBJAHR_ID,
                            halbjahrId, URL.Session.P_KLASSEN_ID, klassenId, URL.Session.P_SCHUELER_ID,
                            schuelerId));
            fillModel(model, halbjahrId, klassenId, schuelerId, bemerkung);
            return EDIT_BEMERKUNG_VIEW;
        }

        LOG.debug("Create Bemerkung: " + bemerkung);
        bemerkungService.save(bemerkung);
        final String nextUrl;
        if (StringUtils.equalsIgnoreCase(action, Common.ACTION_NEXT)) {
            nextUrl = URL.redirectWithNamedParams(URL.ZeugnisPath.BEMERKUNG_CREATE, URL.Session.P_HALBJAHR_ID,
                    halbjahrId, URL.Session.P_KLASSEN_ID, klassenId, URL.Session.P_SCHUELER_ID, schuelerId);
        } else {
            nextUrl = URL.createRedirectToZeugnisUrl(halbjahrId, klassenId, schuelerId);
        }

        return nextUrl;
    }

    /**
     * Zeigt die Bemerkung des entsprechenden Faches der Klasse in dem Halbjahr.
     * @param halbjahrId die Id des Schulhalbjahres
     * @param klassenId die Id der Klasse
     * @param schuelerId die Id des Schuelers
     * @param bemerkungsId die Id der Bemerkung
     * @param model das Model
     * @return die logische View
     */
    @RequestMapping(value = URL.ZeugnisPath.BEMERKUNG_SHOW, method = RequestMethod.GET)
    public String showBemerkung(@PathVariable(URL.Session.P_HALBJAHR_ID) Long halbjahrId,
            @PathVariable(URL.Session.P_KLASSEN_ID) Long klassenId,
            @PathVariable(URL.Session.P_SCHUELER_ID) Long schuelerId,
            @PathVariable(URL.ZeugnisPath.P_BEMERKUNGS_ID) Long bemerkungsId, Model model) {
        final Bemerkung bemerkung = bemerkungService.read(bemerkungsId);
        model.addAttribute(BEMERKUNG, bemerkung);
        model.addAttribute("schulhalbjahr", schulhalbjahrService.read(halbjahrId));
        model.addAttribute("cancelUrl", URL.createLinkToZeugnisUrl(halbjahrId, klassenId, schuelerId));
        model.addAttribute("editUrl",
                URL.filledURLWithNamedParams(URL.ZeugnisPath.BEMERKUNG_EDIT, URL.Session.P_HALBJAHR_ID, halbjahrId,
                        URL.Session.P_KLASSEN_ID, klassenId, URL.Session.P_SCHUELER_ID, schuelerId,
                        URL.ZeugnisPath.P_BEMERKUNGS_ID, bemerkungsId));
        model.addAttribute("deleteUrl",
                URL.filledURLWithNamedParams(URL.ZeugnisPath.BEMERKUNG_DELETE, URL.Session.P_HALBJAHR_ID,
                        halbjahrId, URL.Session.P_KLASSEN_ID, klassenId, URL.Session.P_SCHUELER_ID, schuelerId,
                        URL.ZeugnisPath.P_BEMERKUNGS_ID, bemerkungsId));
        return "bemerkung/showBemerkung";
    }

    /**
     * Zeigt die Bemerkung des entsprechenden Faches der Klasse in dem Halbjahr.
     * @param halbjahrId die Id des Schulhalbjahres
     * @param klassenId die Id der Klasse
     * @param schuelerId die Id des Schuelers
     * @param bemerkungsId die Id der Bemerkung
     * @param model das Model
     * @return die logische View
     */
    @RequestMapping(value = URL.ZeugnisPath.BEMERKUNG_EDIT, method = RequestMethod.GET)
    public String editBemerkung(@PathVariable(URL.Session.P_HALBJAHR_ID) Long halbjahrId,
            @PathVariable(URL.Session.P_KLASSEN_ID) Long klassenId,
            @PathVariable(URL.Session.P_SCHUELER_ID) Long schuelerId,
            @PathVariable(URL.ZeugnisPath.P_BEMERKUNGS_ID) Long bemerkungsId, Model model) {
        final Bemerkung bemerkung = bemerkungService.read(bemerkungsId);
        fillModel(model, halbjahrId, klassenId, schuelerId, bemerkung);
        fillModelWithUpdateAndDeleteURLs(model, halbjahrId, klassenId, schuelerId, bemerkungsId);
        return EDIT_BEMERKUNG_VIEW;
    }

    /**
     * @param model
     * @param halbjahrId
     * @param klassenId
     * @param schuelerId
     * @param bemerkungsId
     */
    private void fillModelWithUpdateAndDeleteURLs(Model model, Long halbjahrId, Long klassenId, Long schuelerId,
            Long bemerkungsId) {
        model.addAttribute("updateUrl",
                URL.filledURLWithNamedParams(URL.ZeugnisPath.BEMERKUNG_EDIT, URL.Session.P_HALBJAHR_ID, halbjahrId,
                        URL.Session.P_KLASSEN_ID, klassenId, URL.Session.P_SCHUELER_ID, schuelerId,
                        URL.ZeugnisPath.P_BEMERKUNGS_ID, bemerkungsId));
        model.addAttribute("deleteUrl",
                URL.filledURLWithNamedParams(URL.ZeugnisPath.BEMERKUNG_DELETE, URL.Session.P_HALBJAHR_ID,
                        halbjahrId, URL.Session.P_KLASSEN_ID, klassenId, URL.Session.P_SCHUELER_ID, schuelerId,
                        URL.ZeugnisPath.P_BEMERKUNGS_ID, bemerkungsId));
    }

    /**
     * Speichert die neu angelegte Bemerkung.
     * @param halbjahrId die Id des Schulhalbjahres
     * @param klassenId die Id der Klasse
     * @param schuelerId die Id des Schuelers
     * @param bemerkungsId die Id der Bemerkung
     * @param bemerkung die zu speichernde Bemerkung.
     * @param result das Bindingresult.
     * @param model das Model
     * @return die logische View
     */
    @RequestMapping(value = URL.ZeugnisPath.BEMERKUNG_EDIT, method = RequestMethod.POST)
    public String updateBemerkung(@PathVariable(URL.Session.P_HALBJAHR_ID) Long halbjahrId,
            @PathVariable(URL.Session.P_KLASSEN_ID) Long klassenId,
            @PathVariable(URL.Session.P_SCHUELER_ID) Long schuelerId,
            @PathVariable(URL.ZeugnisPath.P_BEMERKUNGS_ID) Long bemerkungsId,
            @ModelAttribute(BEMERKUNG) Bemerkung bemerkung, BindingResult result, Model model) {
        validator.validate(bemerkung, result);

        if (result.hasErrors()) {
            fillModelWithUpdateAndDeleteURLs(model, halbjahrId, klassenId, schuelerId, bemerkungsId);
            fillModel(model, halbjahrId, klassenId, schuelerId, bemerkung);
            return EDIT_BEMERKUNG_VIEW;
        }

        LOG.debug("Update Bemerkung: " + bemerkung);
        bemerkungService.save(bemerkung);
        return URL.createRedirectToZeugnisUrl(halbjahrId, klassenId, schuelerId);
    }

    /**
     * Breche die Bearbeitung der Bemerkung ab.
     * @param halbjahrId Id des {@link Schulhalbjahr}.
     * @param klassenId Id der {@link Klasse}.
     * @param schuelerId Id des {@link Schueler}.
     * @return die anzuzeigende View.
     */
    @RequestMapping(value = URL.ZeugnisPath.BEMERKUNG_CANCEL, method = RequestMethod.POST)
    public String cancelEditBemerkung(@PathVariable(URL.Session.P_HALBJAHR_ID) Long halbjahrId,
            @PathVariable(URL.Session.P_KLASSEN_ID) Long klassenId,
            @PathVariable(URL.Session.P_SCHUELER_ID) Long schuelerId) {
        return URL.createRedirectToZeugnisUrl(halbjahrId, klassenId, schuelerId);
    }

    /**
     * Lscht die Bemerkung.
     * @param halbjahrId Id des {@link Schulhalbjahr}.
     * @param klassenId Id der {@link Klasse}.
     * @param schuelerId Id des {@link Schueler}.
     * @param bemerkungsId die Id der zu lschenden {@link Bemerkung}.
     * @return die anzuzeigende View.
     */
    @RequestMapping(value = URL.ZeugnisPath.BEMERKUNG_DELETE, method = RequestMethod.POST)
    public String deleteBemerkung(@PathVariable(URL.Session.P_HALBJAHR_ID) Long halbjahrId,
            @PathVariable(URL.Session.P_KLASSEN_ID) Long klassenId,
            @PathVariable(URL.Session.P_SCHUELER_ID) Long schuelerId,
            @PathVariable(URL.ZeugnisPath.P_BEMERKUNGS_ID) Long bemerkungsId) {
        bemerkungService.delete(bemerkungsId);
        return URL.createRedirectToZeugnisUrl(halbjahrId, klassenId, schuelerId);
    }

    private void fillModel(Model model, Long halbjahrId, Long klassenId, Long schuelerId, Bemerkung bemerkung) {
        final List<BemerkungsBaustein> bemerkungsBausteine = bemerkungService.getAllBausteine(bemerkung);
        model.addAttribute(BEMERKUNG, bemerkung);
        model.addAttribute("schulhalbjahr", schulhalbjahrService.read(halbjahrId));
        model.addAttribute("cancelUrl",
                URL.filledURLWithNamedParams(URL.ZeugnisPath.BEMERKUNG_CANCEL, URL.Session.P_HALBJAHR_ID,
                        halbjahrId, URL.Session.P_KLASSEN_ID, klassenId, URL.Session.P_SCHUELER_ID, schuelerId));
        model.addAttribute("bemerkungsBausteine", bemerkungsBausteine);
    }

}