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;
}
}