Package de.nak.notendb.action

Source Code of de.nak.notendb.action.ErfasseMuendlicheAction

package de.nak.notendb.action;

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 com.opensymphony.xwork2.ActionSupport;

import de.nak.notendb.model.Pruefungsleistung;
import de.nak.notendb.service.PruefungsleistungService;
import de.nak.notendb.util.Util;

/**
* @author Nils Foßhag
*
*         Action Klasse, welche die Massenspeicherung mündlicher Prüfungen
*         durchführt.
*/
@SuppressWarnings("serial")
public class ErfasseMuendlicheAction extends ActionSupport {
  // Services
  private PruefungsleistungService pruefungsleistungService;
  private List<Pruefungsleistung> zuSpeicherndePruefungsleistungen;

  // Vom View erwartete Attribute
  private HashMap<String, String> muendlicheMap;
  private Date datum;
  private String uhrzeit;
  private Long selektierteManipelId;
  private Long selektiertePruefungId;

  /**
   * Führt die Speicherung der erfassten mündlichen Prüfungen durch. Die
   * Usereinträge werden in der HasMap "muendlicheMap" erwartet, wobei der Key
   * die Id der Prüfungsleistung enthält und im Value die zu erfassende Note
   * hinterlegt wird.
   *
   */
  @Override
  public String execute() throws Exception {
    NumberFormat formatter = NumberFormat.getNumberInstance(Locale.GERMANY);
    zuSpeicherndePruefungsleistungen = new ArrayList<Pruefungsleistung>();
    if (muendlicheMap != null) {
      for (Map.Entry<String, String> eintrag : muendlicheMap.entrySet()) {
        if (!eintrag.getKey().isEmpty()
            && !eintrag.getValue().isEmpty()) {
          Pruefungsleistung leistung = pruefungsleistungService
              .ladeLeistung(Long.parseLong(eintrag.getKey()));
          if (!leistung.getMuendlichMoeglich()) {
            addFieldError("muendlicheMap['" + eintrag.getKey()
                + "']",
                getText("validation.muendlich.moeglich"));
            return INPUT;
          }
          leistung.setErgebnisErgaenzPruef(formatter.parse(
              eintrag.getValue()).floatValue());
          leistung.setDatumErgaenzPruef(Util.setzeZeitZuDatum(
              uhrzeit, datum));
          zuSpeicherndePruefungsleistungen.add(leistung);
        }
      }
      if (zuSpeicherndePruefungsleistungen.size() > 0) {
        pruefungsleistungService
            .erfasseMuendliche(zuSpeicherndePruefungsleistungen);
      }
    }
    return SUCCESS;
  }

  public PruefungsleistungService getPruefungsleistungService() {
    return pruefungsleistungService;
  }

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

  public List<Pruefungsleistung> getZuSpeicherndePruefungsleistungen() {
    return zuSpeicherndePruefungsleistungen;
  }

  public void setZuSpeicherndePruefungsleistungen(
      List<Pruefungsleistung> zuSpeicherndePruefungsleistungen) {
    this.zuSpeicherndePruefungsleistungen = zuSpeicherndePruefungsleistungen;
  }

  public HashMap<String, String> getMuendlicheMap() {
    return muendlicheMap;
  }

  public void setMuendlicheMap(HashMap<String, String> muendlicheMap) {
    this.muendlicheMap = muendlicheMap;
  }

  public Date getDatum() {
    return datum;
  }

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

  public String getUhrzeit() {
    return uhrzeit;
  }

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

  /**
   * Prüfung ob das Datum der Ergänzungprüfung nicht in der Zukunft liegt und
   * ob die Werte in der übergebenen Map in Ordnung sind.
   *
   */
  @Override
  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 (muendlicheMap != null) {
      for (Map.Entry<String, String> eintrag : muendlicheMap.entrySet()) {
        if (!eintrag.getKey().isEmpty()
            && !eintrag.getValue().isEmpty()) {
          NumberFormat formatter = NumberFormat
              .getNumberInstance(Locale.GERMANY);
          try {
            Float note = formatter.parse(eintrag.getValue())
                .floatValue();
            // Auf Basis unserer Annahmen (vgl. Konzept) sind nur
            // 3,7; 4
            // und 5 als Ergebnisse einer Mündlichen Prüfung erlaubt
            if (!(note == 3.7F || note == 4.0F || note == 5.0F)) {
              addFieldError("muendlicheMap['" + eintrag.getKey()
                  + "']",
                  this.getText("validation.muendlich.value"));
            }
          } catch (ParseException e) {
            addFieldError("muendlicheMap['" + eintrag.getKey()
                + "']", this.getText("validation.note.type"));
          }
        }
      }
    }
  }

  public Long getSelektierteManipelId() {
    return selektierteManipelId;
  }

  public void setSelektierteManipelId(Long selektierteManipelId) {
    this.selektierteManipelId = selektierteManipelId;
  }

  public Long getSelektiertePruefungId() {
    return selektiertePruefungId;
  }

  public void setSelektiertePruefungId(Long selektiertePruefungId) {
    this.selektiertePruefungId = selektiertePruefungId;
  }

}
TOP

Related Classes of de.nak.notendb.action.ErfasseMuendlicheAction

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.