net.sf.sze.service.impl.zeugnis.BewertungErfassungsServiceImpl.java Source code

Java tutorial

Introduction

Here is the source code for net.sf.sze.service.impl.zeugnis.BewertungErfassungsServiceImpl.java

Source

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

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import javax.annotation.Resource;

import net.sf.sze.dao.api.stammdaten.KlasseDao;
import net.sf.sze.dao.api.zeugnis.BewertungDao;
import net.sf.sze.dao.api.zeugnis.ZeugnisDao;
import net.sf.sze.dao.api.zeugnisconfig.SchulfachDao;
import net.sf.sze.model.stammdaten.Klasse;
import net.sf.sze.model.zeugnis.Bewertung;
import net.sf.sze.model.zeugnis.Zeugnis;
import net.sf.sze.model.zeugnis.ZeugnisFormular;
import net.sf.sze.model.zeugnisconfig.Schulfach;
import net.sf.sze.service.api.zeugnis.BewertungErfassungsService;
import net.sf.sze.service.api.zeugnis.BewertungWithNeigbors;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 * Implementierung des {@link BewertungErfassungsService}.
 *
 */
@Transactional(readOnly = true)
@Service
public class BewertungErfassungsServiceImpl implements BewertungErfassungsService {

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

    /**
     * Bertungsdao.
     */
    @Resource
    private BewertungDao bewertungDao;

    /**
     * Dao fr eine Schul-{@link  Klasse}.
     */
    @Resource
    private KlasseDao klasseDao;

    /**
     * Dao fr eine {@link  Zeugnis}.
     */
    @Resource
    private ZeugnisDao zeugnisDao;

    /**
     * Dao fr eine {@link  Schulfach}.
     */
    @Resource
    private SchulfachDao schulfachDao;

    /**
     * {@inheritDoc}
     */
    @SuppressWarnings("boxing")
    @Override
    public List<Bewertung> getSortedBewertungen(ZeugnisFormular formular, long schulfachId) {
        LOG.debug("Suche Bewertungn fr {} und {}", formular, schulfachId);
        final List<Zeugnis> zeugnisse = zeugnisDao
                .findAllByFormularKlasseIdAndFormularSchulhalbjahrIdAndFormularSchulhalbjahrSelectableIsTrueOrderBySchuelerNameAscSchuelerVornameAsc(
                        formular.getKlasse().getId(), formular.getSchulhalbjahr().getId());
        //PERFORMANCE: 2 SQLs und eine handisches Suchen ist sicherlich nicht die schnellste Lsung.
        //Der Ansatz mit List<Bewertung>
        //findAllByZeugnisKlasseIdAndZeugnisSchulhalbjahrIdAndSchulfachIdOrderByZeugnisSchuelerNameAscZeugnisSchuelerVornameAsc(
        // long klasseId, long halbjahrId, long schulfachId); Scheitert. Es
        // gab eine Fehlermeldung, dass er kein Element zu einer ZeugnisID
        // findet. Das klingt nach einem Fehler in dem darunter liegenden Framework.
        final List<Bewertung> bewertungen = bewertungDao.findAllBySchulfachIdAndZeugnisIn(schulfachId, zeugnisse);
        Collections.sort(bewertungen);
        return bewertungen;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public BewertungWithNeigbors getBewertungWithNeighbors(ZeugnisFormular formular, Long schulfachId,
            Long bewertungsId) {
        final List<Bewertung> bewertungen = getSortedBewertungen(formular, schulfachId.longValue());
        return new BewertungWithNeigbors(bewertungen, bewertungsId);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public List<Schulfach> getActiveSchulfaecherOrderByName(ZeugnisFormular formular) {
        final String klassenStufe = String
                .valueOf(formular.getKlasse().calculateKlassenstufe(formular.getSchulhalbjahr().getJahr()));
        final List<Schulfach> alleSchulfaecher = schulfachDao.findAll();
        final List<Schulfach> relevanteSchulfaecher = new ArrayList<>();
        for (Schulfach schulfach : alleSchulfaecher) {
            if (schulfach.convertStufenMitZweiNiveausToList().contains(klassenStufe)) {
                relevanteSchulfaecher.add(schulfach);
            } else if (schulfach.convertStufenMitDreiNiveausToList().contains(klassenStufe)) {
                relevanteSchulfaecher.add(schulfach);
            } else if (schulfach.convertStufenMitStandardBewertungToList().contains(klassenStufe)) {
                relevanteSchulfaecher.add(schulfach);
            }
        }
        //PERFORMANCE Besser bei der DB - Abfrage sortieren.
        Collections.sort(relevanteSchulfaecher, new Comparator<Schulfach>() {
            @Override
            public int compare(Schulfach o1, Schulfach o2) {
                return o1.getName().compareTo(o2.getName());
            }
        });
        return relevanteSchulfaecher;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public Klasse getKlasse(long klassenId) {
        return klasseDao.findOne(Long.valueOf(klassenId));
    }

}