Added group models
This commit is contained in:
parent
7da626fb9b
commit
61de43d7d8
|
@ -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"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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() {}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
}
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -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() {}
|
||||||
|
|
||||||
|
}
|
|
@ -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() {}
|
||||||
|
|
||||||
|
}
|
|
@ -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>
|
||||||
|
|
Loading…
Reference in New Issue