Package de.nak.notendb.action

Source Code of de.nak.notendb.action.ErfasseLeistungenAction$NotenZeile

package de.nak.notendb.action;

import java.io.Serializable;
import java.text.NumberFormat;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;

import org.apache.struts2.interceptor.SessionAware;

import com.opensymphony.xwork2.ActionSupport;

import de.nak.notendb.model.Dozent;
import de.nak.notendb.model.Pruefung;
import de.nak.notendb.model.Pruefungsfach;
import de.nak.notendb.model.Pruefungsleistung;
import de.nak.notendb.model.Student;
import de.nak.notendb.service.DozentService;
import de.nak.notendb.service.PruefungsfachService;
import de.nak.notendb.service.PruefungsleistungService;
import de.nak.notendb.service.StudentService;
import de.nak.notendb.util.Util;

/**
* @author Nils Foßhag
*
*         Action Klasse, welche die Massenspeicherung neuer Prüfungsleistungen
*         durchführt.
*/
@SuppressWarnings("serial")
public class ErfasseLeistungenAction extends ActionSupport implements
    SessionAware {
  // Services
  private PruefungsleistungService pruefungsleistungService;
  private PruefungsfachService pruefungsfachService;
  private StudentService studentService;
  private DozentService dozentService;

  // Daten für das Folgeview
  private List<NotenZeile> protokollTabelle;
  private Pruefung pruefung;
  private Dozent dozent;

  // Vom View erwartete Attribute
  private Long selektierteDozentId;
  private Date datum;
  private String uhrzeit;

  // Diese Map enthält als Key die Id des Studenten und als Value die Note.
  private HashMap<String, String> leistungenMap;
  private Map<String, Object> session;

  /**
   * In dieser Methode wird auf Basis der eingegeben Daten eine neue Prüfung
   * angelegt. Für diese Prüfung werden für jeden Studenten, für den Eingaben
   * erfolgt sind Prüfungsleistungen erstellt und gespeichert.
   */
  public String execute() throws Exception {
    NumberFormat formatter = NumberFormat.getNumberInstance(Locale.GERMANY);
    dozent = dozentService.ladeDozent(selektierteDozentId);
    Pruefungsfach pruefungsfach = (Pruefungsfach) session
        .get("pruefungsfach");
    pruefung = new Pruefung();
    pruefung.setDatum(Util.setzeZeitZuDatum(uhrzeit, datum));
    pruefung.setFach(pruefungsfach);
    pruefung.setDozent(dozent);
    List<Pruefungsleistung> zuSpeicherndePruefungsleistungen = new ArrayList<Pruefungsleistung>();
    protokollTabelle = new ArrayList<NotenZeile>();
    // Durchlaufen aller Einträge: Key ist jeweils die Student-Id und Value
    // ist das eingetragene schriftliche Ergebnis pro Student.
    if (leistungenMap != null) {
      for (Map.Entry<String, String> eintrag : leistungenMap.entrySet()) {
        if (!eintrag.getValue().isEmpty()
            && !eintrag.getKey().isEmpty()) {
          Student student = studentService.ladeStudent(Long
              .parseLong(eintrag.getKey()));
          Pruefungsleistung alteLeistung = pruefungsleistungService
              .ladeAktuellGueltigeLeistungZuStudentUndFach(
                  student.getId(), pruefungsfach.getId());
          // Prüfen ob ein weiterer Versuch erfasst werden darf
          if (alteLeistung != null
              && !pruefungsleistungService
                  .isWeitererVersuchErlaubt(alteLeistung)) {
            addFieldError("leistungenMap['" + eintrag.getKey()
                + "']", getText("validation.leistung.versuch"));
            return INPUT;
          }

          Pruefungsleistung neuePruefungsleistung = new Pruefungsleistung();
          neuePruefungsleistung.setStudent(student);
          neuePruefungsleistung.setPruefung(pruefung);
          // Da kein Sicherheitskonzept realisiert wird wird ein
          // Dummy-Erfasser gesetzt.
          neuePruefungsleistung.setErfasserName("Dummy");
          neuePruefungsleistung.setErgebnisNormal(formatter.parse(
              eintrag.getValue()).floatValue());

          zuSpeicherndePruefungsleistungen.add(neuePruefungsleistung);
          protokollTabelle.add(new NotenZeile(student, alteLeistung,
              neuePruefungsleistung));
        }
      }
      pruefungsleistungService
          .speichere(zuSpeicherndePruefungsleistungen);
    }
    return SUCCESS;
  }

  public Pruefung getPruefung() {
    return pruefung;
  }

  public void setPruefung(Pruefung pruefung) {
    this.pruefung = pruefung;
  }

  public PruefungsleistungService getPruefungsleistungService() {
    return pruefungsleistungService;
  }

  public void setPruefungsleistungService(
      PruefungsleistungService pruefungsleistungService) {
    this.pruefungsleistungService = pruefungsleistungService;
  }

  public Long getSelektierteDozentId() {
    return selektierteDozentId;
  }

  public void setSelektierteDozentId(Long selektierteDozentId) {
    this.selektierteDozentId = selektierteDozentId;
  }

  public StudentService getStudentService() {
    return studentService;
  }

  public void setStudentService(StudentService studentService) {
    this.studentService = studentService;
  }

  public DozentService getDozentService() {
    return dozentService;
  }

  public void setDozentService(DozentService dozentService) {
    this.dozentService = dozentService;
  }

  public Date getDatum() {
    return datum;
  }

  public void setDatum(Date datum) {
    this.datum = datum;
  }

  public HashMap<String, String> getLeistungenMap() {
    return leistungenMap;
  }

  public void setLeistungenMap(HashMap<String, String> leistungenMap) {
    this.leistungenMap = leistungenMap;
  }

  public PruefungsfachService getPruefungsfachService() {
    return pruefungsfachService;
  }

  public void setPruefungsfachService(
      PruefungsfachService pruefungsfachService) {
    this.pruefungsfachService = pruefungsfachService;
  }

  public Dozent getDozent() {
    return dozent;
  }

  public void setDozent(Dozent dozent) {
    this.dozent = dozent;
  }

  /**
   * @author Nils Foßhag Diese Klasse stellt eine Hilfsklasse für das View dar
   *         um alte und neue Leistung pro Student gegenüberzustellen.
   */
  public static class NotenZeile implements Serializable {
    private Student student;
    private Pruefungsleistung alteLeistung;
    private Pruefungsleistung neueLeistung;

    public NotenZeile(Student student, Pruefungsleistung alteLeistung,
        Pruefungsleistung neueLeistung) {
      this.student = student;
      this.alteLeistung = alteLeistung;
      this.neueLeistung = neueLeistung;
    }

    public Student getStudent() {
      return student;
    }

    public void setStudent(Student student) {
      this.student = student;
    }

    public Pruefungsleistung getAlteLeistung() {
      return alteLeistung;
    }

    public void setAlteLeistung(Pruefungsleistung alteLeistung) {
      this.alteLeistung = alteLeistung;
    }

    public Pruefungsleistung getNeueLeistung() {
      return neueLeistung;
    }

    public void setNeueLeistung(Pruefungsleistung neueLeistung) {
      this.neueLeistung = neueLeistung;
    }

  }

  public List<NotenZeile> getProtokollTabelle() {
    return protokollTabelle;
  }

  public void setProtokollTabelle(List<NotenZeile> protokollTabelle) {
    this.protokollTabelle = protokollTabelle;
  }

  public String getUhrzeit() {
    return uhrzeit;
  }

  public void setUhrzeit(String uhrzeit) {
    this.uhrzeit = uhrzeit;
  }

  @Override
  /*
   * Prüfung ob die Werte in der übergebenen Map in Ordnung sind.
   */
  public void validate() {
    super.validate();
    // Prüfen ob Datum in der Zukunft liegt und damit für die Erfassung
    // ungültig
    if (datum == null) {
      addFieldError("datum", getText("validation.date.required"));
    } else {
      Calendar c1 = Calendar.getInstance();
      Calendar c2 = Calendar.getInstance();
      c1.setTime(datum);
      c2.setTime(new Date());

      if (c1.after(c2)) {
        addFieldError("datum", getText("validation.date.zukunft"));
      }
    }
    if (leistungenMap != null) {
      for (Map.Entry<String, String> eintrag : leistungenMap.entrySet()) {
        if (!eintrag.getKey().isEmpty()
            && !eintrag.getValue().isEmpty()) {
          NumberFormat formatter = NumberFormat
              .getNumberInstance(Locale.GERMANY);
          try {
            Float note = formatter.parse(eintrag.getValue())
                .floatValue();

            if (!(note == 1.0F || note == 1.3F || note == 1.7F
                || note == 2.0F || note == 2.3F || note == 2.7F
                || note == 3.0F || note == 3.3F || note == 3.7F
                || note == 4.0F || note == 5.0F || note == 6.0F)) {
              addFieldError("leistungenMap['" + eintrag.getKey()
                  + "']",
                  this.getText("validation.note.value"));
            }
          } catch (ParseException e) {
            addFieldError("leistungenMap['" + eintrag.getKey()
                + "']", this.getText("validation.note.type"));
          }
        }
      }
    } else {
      addFieldError("speichern",
          this.getText("validation.note.notpossible"));
    }

  }

  @Override
  public void setSession(Map<String, Object> session) {
    this.session = session;
  }

}
TOP

Related Classes of de.nak.notendb.action.ErfasseLeistungenAction$NotenZeile

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.