Package de.nak.notendb.service

Source Code of de.nak.notendb.service.PruefungsleistungServiceImpl

package de.nak.notendb.service;

import java.util.ArrayList;
import java.util.Date;

import java.util.List;

import de.nak.notendb.dao.PruefungDAO;
import de.nak.notendb.dao.PruefungsleistungDAO;
import de.nak.notendb.model.Pruefung;
import de.nak.notendb.model.Pruefungsfach;
import de.nak.notendb.model.Pruefungsleistung;
import de.nak.notendb.model.Student;

/**
* Implementation des PruefungsleistungService fuer die Verwaltung von Pruefungsleistungen
*
* @author Julian Pusch
*
*/
public class PruefungsleistungServiceImpl implements PruefungsleistungService {

  private PruefungsleistungDAO pruefungsleistungDAO;
  private PruefungDAO pruefungDAO;
 
  public void setPruefungsleistungDAO(PruefungsleistungDAO pruefungsleistungDAO) {
    this.pruefungsleistungDAO = pruefungsleistungDAO;
  }
 
  public void setPruefungDAO(PruefungDAO pruefungDAO) {
    this.pruefungDAO = pruefungDAO;
  }

  @Override
  public Pruefungsleistung ladeLeistung(Long leistungId) throws PruefungsleistungNichtGefundenException {
    Pruefungsleistung leistung = pruefungsleistungDAO.lade(leistungId);
    if (leistung == null) {
      throw new PruefungsleistungNichtGefundenException();
    }
    return leistung;
  }
 
  @Override
  public List<Pruefungsleistung> ladeHistorie(Student student,
      Pruefungsfach fach) {
    return pruefungsleistungDAO.ladeLeistungenZuStudentUndFach(student, fach);
  }
 
  @Override
  public List<Pruefungsleistung> ladeMuendlicheZuPruefung(Long pruefungId) {
    // Alle Leistungen mit muendlicher laden
    List<Pruefungsleistung> alleLeistungen = pruefungsleistungDAO.ladeLeistungenMitMuendlich();
    List<Pruefungsleistung> rueckgabe = new ArrayList<Pruefungsleistung>();;
   
    // gueltige Leistungen zur Pruefung heraussuchen
    for (Pruefungsleistung leistung : alleLeistungen) {
      if (leistung.getGueltig() && leistung.getPruefung().getId().equals(pruefungId)) {
        rueckgabe.add(leistung);
      }
    }
    return rueckgabe;
  }
 
  @Override
  public Pruefungsleistung ladeAktuellGueltigeLeistungZuStudentUndFach(Long studentId, Long fachId) {
    // Alle Leistungen zu Student und Fach laden
    List<Pruefungsleistung> alleLeistungen = pruefungsleistungDAO.ladeLeistungenZuStudentUndFach(studentId, fachId);
    Pruefungsleistung aktuelle = null;

    Date aktuellesDatum = new Date(0);
   
    // gueltige, aktuellste Leistung bestimmen
    for (Pruefungsleistung leistung : alleLeistungen) {
      if (leistung.getGueltig() && leistung.getDatumErfassung().compareTo(aktuellesDatum) > 0 ) {
        aktuelle = leistung;
        aktuellesDatum = leistung.getDatumErfassung();
      }
    }
    return aktuelle;
  }

  @Override
  public void speichere(Pruefungsleistung leistung) throws PruefungsleistungExistentException {
   
    leistung.setGueltig(true);
    leistung.setDatumErfassung(new Date());
    leistung.setMuendlichMoeglich(isMuendlichMoeglich(leistung));
   
    // 6.0 umschluesseln
    if (leistung.getErgebnisNormal() == 6.0) {
      leistung.setErgebnisNormal(5.0f);
    }
     
    // letzte Leistung laden und Versuchanzahl setzen
    Pruefungsleistung letzteLeistung
      = ladeAktuellGueltigeLeistungZuStudentUndFach(
          leistung.getStudent().getId(), leistung.getPruefung().getFach().getId());
   
    if (letzteLeistung != null) {
      leistung.setVersuchNr(letzteLeistung.getVersuchNr() + 1);
      letzteLeistung.setMuendlichMoeglich(false);
      pruefungsleistungDAO.speichere(letzteLeistung);
    } else {
      leistung.setVersuchNr(1);
    }
   
    // persistieren
    if (pruefungsleistungDAO.ladeLeistungenZu(leistung.getPruefung(), leistung.getStudent(),
        leistung.getVersuchNr(), leistung.getGueltig(), leistung.getDatumErfassung()).isEmpty() == false) {
      throw new PruefungsleistungExistentException();
    } else {
      pruefungsleistungDAO.speichere(leistung);
    }
  }

  @Override
  public void speichere(List<Pruefungsleistung> leistungen) throws PruefungsleistungExistentException {
    if (!leistungen.isEmpty()) {
      // erst Pruefung persistieren, da sonst in der Leistung ohne ID und mehrere Pruefungen wuerden erstellt
      Pruefung pruefung = leistungen.get(0).getPruefung();
      pruefungDAO.speichere(pruefung);
     
      for (Pruefungsleistung leistung : leistungen) {
        leistung.setPruefung(pruefung);
        speichere(leistung);
      }
    }
  }
 
  @Override
  public void aendere(Pruefungsleistung leistung) throws PruefungsleistungExistentException {
   
    // letzte Leistung laden
    Pruefungsleistung letzteLeistung
      = ladeAktuellGueltigeLeistungZuStudentUndFach(
          leistung.getStudent().getId(), leistung.getPruefung().getFach().getId());
   
    // nur Aenderung durchfuehren wenn sich die Notenwerte auch unterscheiden
    if (!leistung.getErgebnisNormal().equals(letzteLeistung.getErgebnisNormal())) {
     
      // neues Pruefungsleistung-Objekt erstellen aus altem
      leistung = Pruefungsleistung.erstelleKopie(leistung);
      leistung.setGueltig(true);
     
      boolean muendlichMoeglich = isMuendlichMoeglich(leistung);
      leistung.setMuendlichMoeglich(muendlichMoeglich);
     
      // Falls Aenderung an schriftlicher Note eine muendliche verbietet, muss diese entfernt werden
      if (!muendlichMoeglich) {
        leistung.setErgebnisErgaenzPruef(null);
      }
     
      leistung.setDatumErfassung(new Date());
     
      // 6.0 umschluesseln
      if (leistung.getErgebnisNormal() == 6.0F) {
        leistung.setErgebnisNormal(5.0F);
      }
     
      // vorige Leistung ungueltig setzen
      letzteLeistung.setGueltig(false);
     
      // alte und neue Leistung persistieren
      pruefungsleistungDAO.speichere(letzteLeistung);
     
      if (pruefungsleistungDAO.ladeLeistungenZu(leistung.getPruefung(), leistung.getStudent(),
          leistung.getVersuchNr(), leistung.getGueltig(), leistung.getDatumErfassung()).isEmpty() == false) {
        throw new PruefungsleistungExistentException();
      } else {
        pruefungsleistungDAO.speichere(leistung);
      }
    }
  }

  @Override
  public void erfasseMuendliche(Pruefungsleistung leistung) {

    leistung.setMuendlichMoeglich(false);
   
    pruefungsleistungDAO.speichere(leistung);
  }

  @Override
  public void erfasseMuendliche(List<Pruefungsleistung> leistungen) {
    for (Pruefungsleistung leistung : leistungen) {
      erfasseMuendliche(leistung);
    }
  }

  @Override
  public void storniere(Pruefungsleistung leistung) throws PruefungsleistungExistentException {
   
    leistung.setGueltig(false);
   
    if (pruefungsleistungDAO.ladeLeistungenZu(leistung.getPruefung(), leistung.getStudent(),
        leistung.getVersuchNr(), leistung.getGueltig(), leistung.getDatumErfassung()).isEmpty() == false) {
      throw new PruefungsleistungExistentException();
    } else {
      pruefungsleistungDAO.speichere(leistung);
    }
  }
 
  @Override
  public boolean isWeitererVersuchErlaubt(Pruefungsleistung leistung) {

    if (leistung.getVersuchNr() >= 3 || leistung.getAktuelleNote() <= 4) {
      return false;
    }
    return true;
  }
 
  @Override
  public void loescheAlle() {
    pruefungsleistungDAO.loescheAlle();
  }
 
  /**
   * Ermittelt, ob zu einer uebergebenen Pruefungsleistung noch eine muendliche Nachpruefung erlaubt ist
   *
   * @param leistung Das zu ueberpruefende Pruefungsleistung-Objekt
   * @return Angabe ob muendliche zugelassen ist
   */
  private boolean isMuendlichMoeglich(Pruefungsleistung leistung){
   
    if (leistung.getErgebnisNormal() != 5) {
      return false;
    }
   
    // Pruefen ob bereits 2 muendliche gemacht wurden
    List<Pruefungsleistung> alleLeistungen
      = pruefungsleistungDAO.ladeLeistungenZuStudentUndFach(
          leistung.getStudent(), leistung.getPruefung().getFach());
    Integer muendlicheGemacht = 0;

    for (Pruefungsleistung einzelneLeistung : alleLeistungen) {
      if (einzelneLeistung.getGueltig()
        && !einzelneLeistung.equals(leistung)
        && einzelneLeistung.getErgebnisErgaenzPruef() != null) {
        muendlicheGemacht++;
      }
    }

    if (muendlicheGemacht >= 2) {
      return false;
   
   
    return true;
  }
}
TOP

Related Classes of de.nak.notendb.service.PruefungsleistungServiceImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.