-
Kevin Thaller authoredKevin Thaller authored
Student.java 4.59 KiB
package de.thdeg.grademanager.model;
import de.thdeg.grademanager.interfaces.Calculable;
import de.thdeg.grademanager.model.enumeration.Mark;
import jakarta.persistence.*;
import org.hibernate.annotations.Cascade;
import java.time.LocalDateTime;
import java.util.*;
@Entity
@Table(name = "student")
public class Student extends UniversityMember implements Calculable
{
@Column(name = "status")
private String status;
@Column(name = "paid_fees")
private boolean paidFees;
@Column(name = "semester")
private int semester;
@OneToMany(mappedBy = "student", cascade = CascadeType.ALL, orphanRemoval = true) // cascade = CascadeType.ALL, fetch = FetchType.LAZY)
Set<Enrollment> enrollments;
@OneToOne(fetch = FetchType.LAZY)
private CoursesOfStudy coursesOfStudy;
public Student()
{
}
public Student(String gender, String firstName, String lastName, String placeOfResidence, String birthPlace,
String officialEmail, String privateEmail, String status,
boolean paidFess, int semester)
{
super(gender, firstName, lastName, placeOfResidence, birthPlace,
officialEmail, privateEmail);
this.status = status;
this.paidFees = paidFess;
this.semester = semester;
}
@Override
public double calculateAverage() {
double average = 0.0;
int counter = 0;
for (Enrollment enrollment: enrollments) {
if (enrollment.getGrade() != null){
average += enrollment.getGrade();
counter++;
}
}
return average / counter;
}
@Override
public int calculateMedian() {
List<Double> markList = new ArrayList<>();
int median = 0;
for (Enrollment enrollment:enrollments) {
if (enrollment.getGrade() != null) {
markList.add(enrollment.getGrade());
}
}
Collections.sort(markList);
median = markList.get(markList.size() / 2).intValue();
if (markList.size() % 2 == 0)
median = ((median + markList.get(markList.size() / 2 - 1).intValue()) / 2);
return median;
}
@Override
public String toString() {
return getId() + " " + getFirstName() + " "+ getLastName();
}
public String getStatus()
{
return status;
}
public void setStatus(String status)
{
this.status = status;
}
public boolean isPaidFees()
{
return paidFees;
}
public void setPaidFees(boolean paidFees)
{
this.paidFees = paidFees;
}
public int getSemester()
{
return semester;
}
public void setSemester(int semester)
{
this.semester = semester;
}
public void setCoursesOfStudy(CoursesOfStudy coursesOfStudy){
this.coursesOfStudy = coursesOfStudy;
}
public CoursesOfStudy getCoursesOfStudy(){
return coursesOfStudy;
}
public void initEnrollments(List<Course> courses){
for (Course course: courses) {
System.out.println(course);
enrollments.add(new Enrollment(this, course));
}
}
public Set<Enrollment> getEnrollments(){
return enrollments;
}
public void clearEnrollmentsOldCoursesOfStudy(CoursesOfStudy coursesOfStudy){
List<Enrollment> enrollmentsToRemove = new ArrayList<>();
for (Enrollment enrollment: enrollments){
boolean courseToRemove = true;
for(int i = 0; i < coursesOfStudy.getCourses().size() ; i++){
if(enrollment.course.getId() == coursesOfStudy.getCourses().get(i).getId()){
courseToRemove = false;
break;
}
}
if(courseToRemove){
enrollmentsToRemove.add(enrollment);
}
}
enrollments.removeAll(enrollmentsToRemove);
}
public void rateStudent(Course course, Mark mark){
Enrollment temp = new Enrollment(this, course);
enrollments.remove(temp);
temp.setEnrollmentDate(LocalDateTime.now());
temp.setGrade(mark.getMark());
}
public int[] getExamValues(){
int passedExams = 0;
int failedExams = 0;
int openExams = 0;
for (Enrollment enrollment: enrollments) {
if(enrollment.getGrade() == null){
openExams++;
} else if(enrollment.getGrade() > 4.0 ){
failedExams++;
} else{
passedExams++;
}
}
return new int[]{passedExams, failedExams, openExams};
}
}