Added group models

This commit is contained in:
Andrew Lalis 2019-03-04 12:55:02 +01:00 committed by andrewlalis
parent 7da626fb9b
commit 61de43d7d8
11 changed files with 182 additions and 5 deletions

View File

@ -1,6 +1,8 @@
package nl.andrewlalis.teaching_assistant_assistant; package nl.andrewlalis.teaching_assistant_assistant;
import nl.andrewlalis.teaching_assistant_assistant.model.Course; import nl.andrewlalis.teaching_assistant_assistant.model.Course;
import nl.andrewlalis.teaching_assistant_assistant.model.people.Student;
import nl.andrewlalis.teaching_assistant_assistant.model.people.groups.StudentGroup;
import nl.andrewlalis.teaching_assistant_assistant.model.repositories.CourseRepository; import nl.andrewlalis.teaching_assistant_assistant.model.repositories.CourseRepository;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner; import org.springframework.boot.CommandLineRunner;
@ -25,5 +27,7 @@ public class TeachingAssistantAssistantApplication implements CommandLineRunner
courseRepository.save(new Course("Program Correctness", "PC-002")); courseRepository.save(new Course("Program Correctness", "PC-002"));
System.out.println("Saved two courses."); System.out.println("Saved two courses.");
System.out.println("Course count: " + courseRepository.count()); System.out.println("Course count: " + courseRepository.count());
StudentGroup sg = new StudentGroup();
sg.addMember(new Student("Andrew", "Lalis", "andrewlalisofficial@gmail.com"));
} }
} }

View File

@ -35,4 +35,17 @@ public abstract class BasicEntity {
return this.createdOn; return this.createdOn;
} }
/**
* Two entities are equal if they have the same id.
* @param o The other object.
* @return True if the entities are the same, or false if not.
*/
@Override
public boolean equals(Object o) {
if (o instanceof BasicEntity) {
BasicEntity other = (BasicEntity) o;
return other.id.equals(this.id);
}
return false;
}
} }

View File

@ -45,9 +45,9 @@ public class Course extends BasicEntity {
*/ */
@ManyToMany @ManyToMany
@JoinTable( @JoinTable(
name = "course_teachingAssistant", name = "course_teaching_assistant",
joinColumns = @JoinColumn(name = "course_id"), joinColumns = @JoinColumn(name = "course_id"),
inverseJoinColumns = @JoinColumn(name = "teachingAssistant_id") inverseJoinColumns = @JoinColumn(name = "teaching_assistant_id")
) )
private List<TeachingAssistant> teachingAssistants; private List<TeachingAssistant> teachingAssistants;

View File

@ -1,6 +1,7 @@
package nl.andrewlalis.teaching_assistant_assistant.model.people; package nl.andrewlalis.teaching_assistant_assistant.model.people;
import nl.andrewlalis.teaching_assistant_assistant.model.BasicEntity; import nl.andrewlalis.teaching_assistant_assistant.model.BasicEntity;
import nl.andrewlalis.teaching_assistant_assistant.model.people.groups.Group;
import javax.persistence.*; import javax.persistence.*;
@ -22,6 +23,11 @@ public abstract class Person extends BasicEntity {
@Column @Column
private String emailAddress; private String emailAddress;
@ManyToOne(
fetch = FetchType.LAZY
)
private Group<?> group;
/** /**
* Default constructor for JPA. * Default constructor for JPA.
*/ */
@ -39,4 +45,23 @@ public abstract class Person extends BasicEntity {
this.emailAddress = emailAddress; this.emailAddress = emailAddress;
} }
/*
Getters and Setters
*/
public String getFirstName() {
return this.firstName;
}
public String getLastName() {
return this.lastName;
}
public String getEmailAddress() {
return this.emailAddress;
}
public Group<?> getGroup() {
return this.group;
}
} }

View File

@ -1,6 +1,12 @@
package nl.andrewlalis.teaching_assistant_assistant.model.people; package nl.andrewlalis.teaching_assistant_assistant.model.people;
import nl.andrewlalis.teaching_assistant_assistant.model.Course;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import java.util.List;
/** /**
* Represents a student, or someone enrolled and submitting assignments for a course. * Represents a student, or someone enrolled and submitting assignments for a course.
@ -8,7 +14,21 @@ import javax.persistence.Entity;
@Entity @Entity
public class Student extends Person { public class Student extends Person {
/**
* The list of courses which this student is taking part in.
*/
@ManyToMany
@JoinTable(
name = "course_student",
joinColumns = @JoinColumn(name = "student_id"),
inverseJoinColumns = @JoinColumn(name = "course_id")
)
private List<Course> courses;
/**
* Default constructor for JPA.
*/
protected Student() {}
public Student(String firstName, String lastName, String emailAddress) { public Student(String firstName, String lastName, String emailAddress) {
super(firstName, lastName, emailAddress); super(firstName, lastName, emailAddress);

View File

@ -1,10 +1,9 @@
package nl.andrewlalis.teaching_assistant_assistant.model.people; package nl.andrewlalis.teaching_assistant_assistant.model.people;
import nl.andrewlalis.teaching_assistant_assistant.model.Course;
import nl.andrewlalis.teaching_assistant_assistant.model.assignments.grades.SectionGrade; import nl.andrewlalis.teaching_assistant_assistant.model.assignments.grades.SectionGrade;
import javax.persistence.Entity; import javax.persistence.*;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import java.util.List; import java.util.List;
/** /**
@ -13,6 +12,17 @@ import java.util.List;
@Entity @Entity
public class TeachingAssistant extends Person { public class TeachingAssistant extends Person {
/**
* The list of courses which this teaching assistant is a member of.
*/
@ManyToMany
@JoinTable(
name = "course_teaching_assistant",
joinColumns = @JoinColumn(name = "teaching_assistant_id"),
inverseJoinColumns = @JoinColumn(name = "course_id")
)
private List<Course> courses;
/** /**
* The list of all feedback given by a teaching assistant. * The list of all feedback given by a teaching assistant.
*/ */
@ -20,4 +30,12 @@ public class TeachingAssistant extends Person {
@JoinColumn(name = "teaching_assistant_id") @JoinColumn(name = "teaching_assistant_id")
private List<SectionGrade> sectionGrades; private List<SectionGrade> sectionGrades;
@Column
private TeachingAssistantRole role;
/**
* Default constructor for JPA.
*/
protected TeachingAssistant() {}
} }

View File

@ -0,0 +1,11 @@
package nl.andrewlalis.teaching_assistant_assistant.model.people;
/**
* Defines several types of Teaching Assistant roles for specialization.
*/
public enum TeachingAssistantRole {
GENERAL,
ORGANIZER,
TECHNICAL,
CORRESPONDENT
}

View File

@ -0,0 +1,48 @@
package nl.andrewlalis.teaching_assistant_assistant.model.people.groups;
import nl.andrewlalis.teaching_assistant_assistant.model.BasicEntity;
import nl.andrewlalis.teaching_assistant_assistant.model.people.Person;
import javax.persistence.FetchType;
import javax.persistence.MappedSuperclass;
import javax.persistence.OneToMany;
import java.util.List;
/**
* A group consisting of one or more members. Child classes should define P as a sub class of Person to define custom
* behavior if needed.
* @param <P> The type of members this group contains.
*/
@MappedSuperclass
public abstract class Group<P extends Person> extends BasicEntity {
/**
* The list of members in this group.
*/
@OneToMany(
fetch = FetchType.EAGER,
orphanRemoval = true
)
protected List<P> members;
public void addMember(P person) {
this.members.add(person);
}
public boolean containsMember(P person) {
return this.members.contains(person);
}
public void removeMember(P person) {
this.members.remove(person);
}
/*
Getters and Setters
*/
public List<P> getMembers() {
return this.members;
}
}

View File

@ -0,0 +1,18 @@
package nl.andrewlalis.teaching_assistant_assistant.model.people.groups;
import nl.andrewlalis.teaching_assistant_assistant.model.people.Student;
import javax.persistence.Entity;
/**
* A group of students.
*/
@Entity
public class StudentGroup extends Group<Student> {
/**
* Default constructor for JPA.
*/
public StudentGroup() {}
}

View File

@ -0,0 +1,18 @@
package nl.andrewlalis.teaching_assistant_assistant.model.people.groups;
import nl.andrewlalis.teaching_assistant_assistant.model.people.TeachingAssistant;
import javax.persistence.Entity;
/**
* A group of teaching assistants.
*/
@Entity
public class TeachingAssistantGroup extends Group<TeachingAssistant> {
/**
* Default constructor for JPA.
*/
public TeachingAssistantGroup() {}
}

View File

@ -10,12 +10,14 @@
<tr> <tr>
<th>Name</th> <th>Name</th>
<th>Code</th> <th>Code</th>
<th>Created at</th>
</tr> </tr>
<tr th:each="course: ${courses}"> <tr th:each="course: ${courses}">
<td> <td>
<a th:href="@{/courses/{id}(id=${course.getId()})}" th:text="${course.getName()}"></a> <a th:href="@{/courses/{id}(id=${course.getId()})}" th:text="${course.getName()}"></a>
</td> </td>
<td th:text="${course.getCode()}"></td> <td th:text="${course.getCode()}"></td>
<td th:text="${course.getCreatedOn()}"></td>
</tr> </tr>
</table> </table>
</div> </div>