package de.nak.notendb.action;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import com.opensymphony.xwork2.ActionSupport;
import de.nak.notendb.model.Manipel;
import de.nak.notendb.model.Pruefungsfach;
import de.nak.notendb.model.Pruefungsleistung;
import de.nak.notendb.model.Student;
import de.nak.notendb.service.ManipelService;
import de.nak.notendb.service.PruefungsfachService;
import de.nak.notendb.service.PruefungsleistungService;
import de.nak.notendb.service.StudentService;
/**
* @author Nils Foßhag
*
* Action Klasse, welche die benötigten Daten für die Anzeige der noch
* offenen der Notenübersicht bereitstellt.
*
* Hierfür wird eine verschachtelte HashMap verwendet die pro Student,
* pro Prüfungsfach die aktuelle Note enthält.
*/
@SuppressWarnings("serial")
public class ZeigeNotenUebersichtAction extends ActionSupport {
// Services
private PruefungsleistungService pruefungsleistungService;
private StudentService studentService;
private PruefungsfachService pruefungsfachService;
private ManipelService manipelService;
// Beans
private Manipel manipel;
// Lists
private List<Pruefungsfach> pruefungsfaecher;
// Vom View erwartete Attribute
private Long selektierteManipelId;
// Map für die Darstellung der Übersicht
private HashMap<Student, HashMap<Pruefungsfach, Pruefungsleistung>> uebersichtsMap;
@Override
public String execute() throws Exception {
manipel = manipelService.ladeManipel(selektierteManipelId);
List<Student> studenten = new ArrayList<Student>();
uebersichtsMap = new LinkedHashMap<Student, HashMap<Pruefungsfach, Pruefungsleistung>>();
pruefungsfaecher = pruefungsfachService.ladeFaecherZuManipel(selektierteManipelId);
studenten = studentService.ladeStudentenZuManipel(selektierteManipelId);
Collections.sort(pruefungsfaecher);
Collections.sort(studenten);
for (Student student : studenten) {
HashMap<Pruefungsfach, Pruefungsleistung> noteZuFachMap = new LinkedHashMap<Pruefungsfach, Pruefungsleistung>();
for (Pruefungsfach fach : pruefungsfaecher) {
Pruefungsleistung leistung = pruefungsleistungService.ladeAktuellGueltigeLeistungZuStudentUndFach(
student.getId(), fach.getId());
if (leistung == null) {
// Für das View wird eine leere Prüfungsleistung erzeugt
leistung = new Pruefungsleistung();
}
noteZuFachMap.put(fach, leistung);
}
uebersichtsMap.put(student, noteZuFachMap);
}
return SUCCESS;
}
public HashMap<Student, HashMap<Pruefungsfach, Pruefungsleistung>> getUebersichtsMap() {
return uebersichtsMap;
}
public void setUebersichtsMap(HashMap<Student, HashMap<Pruefungsfach, Pruefungsleistung>> uebersichtsMap) {
this.uebersichtsMap = uebersichtsMap;
}
public Long getSelektierteManipelId() {
return selektierteManipelId;
}
public void setSelektierteManipelId(Long selektierteManipelId) {
this.selektierteManipelId = selektierteManipelId;
}
public PruefungsleistungService getPruefungsleistungService() {
return pruefungsleistungService;
}
public void setPruefungsleistungService(PruefungsleistungService pruefungsleistungService) {
this.pruefungsleistungService = pruefungsleistungService;
}
public StudentService getStudentService() {
return studentService;
}
public void setStudentService(StudentService studentService) {
this.studentService = studentService;
}
public PruefungsfachService getPruefungsfachService() {
return pruefungsfachService;
}
public void setPruefungsfachService(PruefungsfachService pruefungsfachService) {
this.pruefungsfachService = pruefungsfachService;
}
public List<Pruefungsfach> getPruefungsfaecher() {
return pruefungsfaecher;
}
public void setPruefungsfaecher(List<Pruefungsfach> pruefungsfaecher) {
this.pruefungsfaecher = pruefungsfaecher;
}
public Manipel getManipel() {
return manipel;
}
public void setManipel(Manipel manipel) {
this.manipel = manipel;
}
public ManipelService getManipelService() {
return manipelService;
}
public void setManipelService(ManipelService manipelService) {
this.manipelService = manipelService;
}
}