package de.nak.notendb.action;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
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.Manipel;
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.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 Noten
* zu einem Manipel und Auswahlinhalte für die Erzeugung einer Prüfung
* bereitstellt.
*/
@SuppressWarnings("serial")
public class ZeigeManipelNotenAction extends ActionSupport implements SessionAware {
// Services
private DozentService dozentService;
private PruefungsleistungService pruefungsleistungService;
private PruefungsfachService pruefungsfachService;
private StudentService studentService;
private ManipelService manipelService;
// Value-Initialisierung fürs View:
private Date datum;
private String uhrzeit;
// Vom View erwartete Attribute
private Long selektierteManipelId;
private Long selektiertePruefungsfachId;
private Map<String, Object> session;
/**
* Die Dozentenliste wird geladen und die View-Eingabeparameter werden
* initialisiert. Die Tabelle zur Pflege der Noten wird in Form einer Liste
* von "Erfassungszeilen" in der Session bereitgestellt, um bei Fehleingaben
* die Werte weiterhin anzeigen zu können.
*/
@Override
public String execute() throws Exception {
List<ErfassungsZeile> erfassungsTabelle = new ArrayList<ErfassungsZeile>();
List<Dozent> dozenten = dozentService.ladeAlle();
Pruefungsfach pruefungsfach = pruefungsfachService.ladeFach(selektiertePruefungsfachId);
Manipel manipel = manipelService.ladeManipel(selektierteManipelId);
List<Student> studenten = studentService.ladeStudentenZuManipel(selektierteManipelId);
Collections.sort(studenten);
for (Student s : studenten) {
Pruefungsleistung pruefungsleistung = pruefungsleistungService.ladeAktuellGueltigeLeistungZuStudentUndFach(
s.getId(), pruefungsfach.getId());
if (pruefungsleistung == null) {
pruefungsleistung = new Pruefungsleistung();
pruefungsleistung.setStudent(s);
erfassungsTabelle.add(new ErfassungsZeile(pruefungsleistung, true));
} else {
erfassungsTabelle.add(new ErfassungsZeile(pruefungsleistung, pruefungsleistungService
.isWeitererVersuchErlaubt(pruefungsleistung)));
}
}
// Initialwerte für das Folgeview setzen:
datum = new Date();
uhrzeit = "12:00";
session.put("dozenten", dozenten);
session.put("manipel", manipel);
session.put("pruefungsfach", pruefungsfach);
session.put("erfassungsTabelle", erfassungsTabelle);
return SUCCESS;
}
public PruefungsleistungService getPruefungsleistungService() {
return pruefungsleistungService;
}
public void setPruefungsleistungService(PruefungsleistungService pruefungsleistungService) {
this.pruefungsleistungService = pruefungsleistungService;
}
public DozentService getDozentService() {
return dozentService;
}
public void setDozentService(DozentService dozentService) {
this.dozentService = dozentService;
}
public PruefungsfachService getPruefungsfachService() {
return pruefungsfachService;
}
public void setPruefungsfachService(PruefungsfachService pruefungsfachService) {
this.pruefungsfachService = pruefungsfachService;
}
public StudentService getStudentService() {
return studentService;
}
public void setStudentService(StudentService studentService) {
this.studentService = studentService;
}
public ManipelService getManipelService() {
return manipelService;
}
public void setManipelService(ManipelService manipelService) {
this.manipelService = manipelService;
}
public Long getSelektierteManipelId() {
return selektierteManipelId;
}
public void setSelektierteManipelId(Long selektierteManipelId) {
this.selektierteManipelId = selektierteManipelId;
}
public Long getSelektiertePruefungsfachId() {
return selektiertePruefungsfachId;
}
public void setSelektiertePruefungsfachId(Long selektiertePruefungsfachId) {
this.selektiertePruefungsfachId = selektiertePruefungsfachId;
}
@Override
public void setSession(Map<String, Object> session) {
this.session = session;
}
/**
* @author Nils Foßhag
*
* Hilfsklasse, die eine Zeile der Tabelle für das View darstellt.
* Um sie in der Session halten zu können muss sie Serializable
* sein. Zusätzlich muss sie hierfür statisch deklariert sein, um
* sie von der umgebenden Action zu entkoppeln.
*/
public static class ErfassungsZeile implements Serializable {
Pruefungsleistung pruefungsleistung;
Boolean erfassungMoeglich;
public ErfassungsZeile(Pruefungsleistung pruefungsleistung, Boolean erfassungMoeglich) {
this.pruefungsleistung = pruefungsleistung;
this.erfassungMoeglich = erfassungMoeglich;
}
public Pruefungsleistung getPruefungsleistung() {
return pruefungsleistung;
}
public void setPruefungsleistung(Pruefungsleistung pruefungsleistung) {
this.pruefungsleistung = pruefungsleistung;
}
public Boolean getErfassungMoeglich() {
return erfassungMoeglich;
}
public void setErfassungMoeglich(Boolean erfassungMoeglich) {
this.erfassungMoeglich = erfassungMoeglich;
}
}
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;
}
}