Switched to mysql implementation and added persistence for students.
This commit is contained in:
parent
df92a2c2d5
commit
d9d9a51707
|
@ -1,34 +0,0 @@
|
||||||
package nl.andrewlalis.teaching_assistant_assistant.config;
|
|
||||||
|
|
||||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
|
||||||
import org.springframework.boot.jdbc.DataSourceBuilder;
|
|
||||||
import org.springframework.context.annotation.Bean;
|
|
||||||
import org.springframework.context.annotation.Configuration;
|
|
||||||
import org.springframework.context.annotation.Primary;
|
|
||||||
|
|
||||||
import javax.sql.DataSource;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Configures the data source for this application.
|
|
||||||
*/
|
|
||||||
@Configuration
|
|
||||||
public class DataSourceConfig {
|
|
||||||
|
|
||||||
private static final String USERNAME = "root";
|
|
||||||
private static final String PASSWORD = "root";
|
|
||||||
private static final String DB_HOST = "localhost";
|
|
||||||
private static final String DB_NAME = "teaching_assistant_assistant";
|
|
||||||
|
|
||||||
@ConfigurationProperties(prefix = "spring.datasource")
|
|
||||||
@Bean
|
|
||||||
@Primary
|
|
||||||
public DataSource getDataSource() {
|
|
||||||
return DataSourceBuilder
|
|
||||||
.create()
|
|
||||||
.url("jdbc:h2:~/" + DB_NAME)
|
|
||||||
.username(USERNAME)
|
|
||||||
.password(PASSWORD)
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -3,7 +3,8 @@ package nl.andrewlalis.teaching_assistant_assistant.controllers.courses;
|
||||||
import nl.andrewlalis.teaching_assistant_assistant.model.Course;
|
import nl.andrewlalis.teaching_assistant_assistant.model.Course;
|
||||||
import nl.andrewlalis.teaching_assistant_assistant.model.people.teams.StudentTeam;
|
import nl.andrewlalis.teaching_assistant_assistant.model.people.teams.StudentTeam;
|
||||||
import nl.andrewlalis.teaching_assistant_assistant.model.repositories.CourseRepository;
|
import nl.andrewlalis.teaching_assistant_assistant.model.repositories.CourseRepository;
|
||||||
import nl.andrewlalis.teaching_assistant_assistant.model.repositories.TeamRepository;
|
import nl.andrewlalis.teaching_assistant_assistant.model.repositories.StudentRepository;
|
||||||
|
import nl.andrewlalis.teaching_assistant_assistant.model.repositories.StudentTeamRepository;
|
||||||
import nl.andrewlalis.teaching_assistant_assistant.util.team_importing.StudentTeamImporter;
|
import nl.andrewlalis.teaching_assistant_assistant.util.team_importing.StudentTeamImporter;
|
||||||
import org.springframework.stereotype.Controller;
|
import org.springframework.stereotype.Controller;
|
||||||
import org.springframework.ui.Model;
|
import org.springframework.ui.Model;
|
||||||
|
@ -25,11 +26,14 @@ public class ImportStudents {
|
||||||
|
|
||||||
private CourseRepository courseRepository;
|
private CourseRepository courseRepository;
|
||||||
|
|
||||||
private TeamRepository teamRepository;
|
private StudentTeamRepository studentTeamRepository;
|
||||||
|
|
||||||
protected ImportStudents(CourseRepository courseRepository, TeamRepository teamRepository) {
|
private StudentRepository studentRepository;
|
||||||
|
|
||||||
|
protected ImportStudents(CourseRepository courseRepository, StudentTeamRepository studentTeamRepository, StudentRepository studentRepository) {
|
||||||
this.courseRepository = courseRepository;
|
this.courseRepository = courseRepository;
|
||||||
this.teamRepository = teamRepository;
|
this.studentTeamRepository = studentTeamRepository;
|
||||||
|
this.studentRepository = studentRepository;
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/courses/{code}/import_students")
|
@GetMapping("/courses/{code}/import_students")
|
||||||
|
@ -50,8 +54,33 @@ public class ImportStudents {
|
||||||
return "redirect:/courses";
|
return "redirect:/courses";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Course course = optionalCourse.get();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
List<StudentTeam> studentTeams = StudentTeamImporter.importFromCSV(file.getInputStream(), optionalCourse.get());
|
List<StudentTeam> studentTeams = StudentTeamImporter.importFromCSV(file.getInputStream(), optionalCourse.get());
|
||||||
|
|
||||||
|
// Save all the new students first, then save all the teams they belong to.
|
||||||
|
for (StudentTeam team : studentTeams) {
|
||||||
|
team.getMembers().forEach(student -> student.assignToCourse(course));
|
||||||
|
this.studentRepository.saveAll(team.getStudents());
|
||||||
|
team.setCourse(course);
|
||||||
|
}
|
||||||
|
|
||||||
|
studentTeams.forEach(team -> {
|
||||||
|
team.getMembers().forEach(student -> {
|
||||||
|
student.assignToCourse(course);
|
||||||
|
course.addParticipant(student);
|
||||||
|
});
|
||||||
|
team.setCourse(course);
|
||||||
|
course.addStudentTeam(team);
|
||||||
|
|
||||||
|
//this.studentRepository.saveAll((team.getMembers()));
|
||||||
|
});
|
||||||
|
|
||||||
|
//this.studentTeamRepository.saveAll(studentTeams);
|
||||||
|
|
||||||
|
this.courseRepository.save(course);
|
||||||
|
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
package nl.andrewlalis.teaching_assistant_assistant.model;
|
package nl.andrewlalis.teaching_assistant_assistant.model;
|
||||||
|
|
||||||
import nl.andrewlalis.teaching_assistant_assistant.model.assignments.Assignment;
|
import nl.andrewlalis.teaching_assistant_assistant.model.assignments.Assignment;
|
||||||
|
import nl.andrewlalis.teaching_assistant_assistant.model.people.Person;
|
||||||
|
import nl.andrewlalis.teaching_assistant_assistant.model.people.Student;
|
||||||
import nl.andrewlalis.teaching_assistant_assistant.model.people.teams.StudentTeam;
|
import nl.andrewlalis.teaching_assistant_assistant.model.people.teams.StudentTeam;
|
||||||
import nl.andrewlalis.teaching_assistant_assistant.model.people.teams.TeachingAssistantTeam;
|
import nl.andrewlalis.teaching_assistant_assistant.model.people.teams.TeachingAssistantTeam;
|
||||||
|
|
||||||
|
@ -57,6 +59,19 @@ public class Course extends BasicEntity {
|
||||||
)
|
)
|
||||||
private List<TeachingAssistantTeam> teachingAssistantTeams;
|
private List<TeachingAssistantTeam> teachingAssistantTeams;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The list of all participants in this course, both teaching assistants and students.
|
||||||
|
*/
|
||||||
|
@ManyToMany(
|
||||||
|
cascade = CascadeType.ALL
|
||||||
|
)
|
||||||
|
@JoinTable(
|
||||||
|
name = "course_participants",
|
||||||
|
joinColumns = @JoinColumn(name = "course_id"),
|
||||||
|
inverseJoinColumns = @JoinColumn(name = "person_id")
|
||||||
|
)
|
||||||
|
private List<Person> participants;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default constructor for JPA.
|
* Default constructor for JPA.
|
||||||
*/
|
*/
|
||||||
|
@ -64,6 +79,7 @@ public class Course extends BasicEntity {
|
||||||
this.assignments = new ArrayList<>();
|
this.assignments = new ArrayList<>();
|
||||||
this.studentTeams = new ArrayList<>();
|
this.studentTeams = new ArrayList<>();
|
||||||
this.teachingAssistantTeams = new ArrayList<>();
|
this.teachingAssistantTeams = new ArrayList<>();
|
||||||
|
this.participants = new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -85,6 +101,12 @@ public class Course extends BasicEntity {
|
||||||
this.teachingAssistantTeams.add(team);
|
this.teachingAssistantTeams.add(team);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void addParticipant(Person person) {
|
||||||
|
if (!this.participants.contains(person)) {
|
||||||
|
this.participants.add(person);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Getters and Setters
|
Getters and Setters
|
||||||
*/
|
*/
|
||||||
|
@ -109,6 +131,16 @@ public class Course extends BasicEntity {
|
||||||
return teachingAssistantTeams;
|
return teachingAssistantTeams;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<Student> getStudents() {
|
||||||
|
List<Student> students = new ArrayList<>();
|
||||||
|
this.participants.forEach(participant -> {
|
||||||
|
if (participant instanceof Student) {
|
||||||
|
students.add((Student) participant);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return students;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
StringBuilder sb = new StringBuilder(this.getName()).append('\n');
|
StringBuilder sb = new StringBuilder(this.getName()).append('\n');
|
||||||
|
|
|
@ -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.Course;
|
||||||
import nl.andrewlalis.teaching_assistant_assistant.model.people.teams.Team;
|
import nl.andrewlalis.teaching_assistant_assistant.model.people.teams.Team;
|
||||||
|
|
||||||
import javax.persistence.*;
|
import javax.persistence.*;
|
||||||
|
@ -41,11 +42,21 @@ public abstract class Person extends BasicEntity {
|
||||||
)
|
)
|
||||||
private List<Team> teams;
|
private List<Team> teams;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The list of courses that this person belongs to.
|
||||||
|
*/
|
||||||
|
@ManyToMany(
|
||||||
|
fetch = FetchType.LAZY,
|
||||||
|
mappedBy = "participants"
|
||||||
|
)
|
||||||
|
private List<Course> courses;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default constructor for JPA.
|
* Default constructor for JPA.
|
||||||
*/
|
*/
|
||||||
protected Person () {
|
protected Person () {
|
||||||
this.teams = new ArrayList<>();
|
this.teams = new ArrayList<>();
|
||||||
|
this.courses = new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -64,7 +75,15 @@ public abstract class Person extends BasicEntity {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void assignToTeam(Team team) {
|
public void assignToTeam(Team team) {
|
||||||
this.teams.add(team);
|
if (!this.teams.contains(team)) {
|
||||||
|
this.teams.add(team);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void assignToCourse(Course course) {
|
||||||
|
if (!this.courses.contains(course)) {
|
||||||
|
this.courses.add(course);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -91,6 +110,10 @@ public abstract class Person extends BasicEntity {
|
||||||
return this.githubUsername;
|
return this.githubUsername;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<Course> getCourses() {
|
||||||
|
return this.courses;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Determines if two Persons are equal. They are considered equal when all of the basic identifying information
|
* Determines if two Persons are equal. They are considered equal when all of the basic identifying information
|
||||||
* about the person is the same, regardless of case.
|
* about the person is the same, regardless of case.
|
||||||
|
|
|
@ -1,18 +1,20 @@
|
||||||
package nl.andrewlalis.teaching_assistant_assistant.model.people.teams;
|
package nl.andrewlalis.teaching_assistant_assistant.model.people.teams;
|
||||||
|
|
||||||
import nl.andrewlalis.teaching_assistant_assistant.model.assignments.grades.AssignmentGrade;
|
import nl.andrewlalis.teaching_assistant_assistant.model.assignments.grades.AssignmentGrade;
|
||||||
|
import nl.andrewlalis.teaching_assistant_assistant.model.people.Person;
|
||||||
import nl.andrewlalis.teaching_assistant_assistant.model.people.Student;
|
import nl.andrewlalis.teaching_assistant_assistant.model.people.Student;
|
||||||
|
|
||||||
import javax.persistence.Entity;
|
import javax.persistence.Entity;
|
||||||
import javax.persistence.FetchType;
|
import javax.persistence.FetchType;
|
||||||
import javax.persistence.OneToMany;
|
import javax.persistence.OneToMany;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A group of students.
|
* A group of students.
|
||||||
*/
|
*/
|
||||||
@Entity
|
@Entity
|
||||||
public class StudentTeam extends Team<Student> {
|
public class StudentTeam extends Team {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The list of assignment grades which this student group has received.
|
* The list of assignment grades which this student group has received.
|
||||||
|
@ -27,8 +29,13 @@ public class StudentTeam extends Team<Student> {
|
||||||
*/
|
*/
|
||||||
public StudentTeam() {}
|
public StudentTeam() {}
|
||||||
|
|
||||||
@Override
|
public List<Student> getStudents() {
|
||||||
public void addMember(Student person) {
|
List<Person> people = super.getMembers();
|
||||||
this.getMembers().add(person);
|
List<Student> students = new ArrayList<>();
|
||||||
|
people.forEach(person -> {
|
||||||
|
students.add((Student) person);
|
||||||
|
});
|
||||||
|
return students;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package nl.andrewlalis.teaching_assistant_assistant.model.people.teams;
|
package nl.andrewlalis.teaching_assistant_assistant.model.people.teams;
|
||||||
|
|
||||||
import nl.andrewlalis.teaching_assistant_assistant.model.assignments.grades.SectionGrade;
|
import nl.andrewlalis.teaching_assistant_assistant.model.assignments.grades.SectionGrade;
|
||||||
|
import nl.andrewlalis.teaching_assistant_assistant.model.people.Person;
|
||||||
import nl.andrewlalis.teaching_assistant_assistant.model.people.TeachingAssistant;
|
import nl.andrewlalis.teaching_assistant_assistant.model.people.TeachingAssistant;
|
||||||
import nl.andrewlalis.teaching_assistant_assistant.model.people.TeachingAssistantRole;
|
import nl.andrewlalis.teaching_assistant_assistant.model.people.TeachingAssistantRole;
|
||||||
|
|
||||||
|
@ -8,13 +9,14 @@ import javax.persistence.Column;
|
||||||
import javax.persistence.Entity;
|
import javax.persistence.Entity;
|
||||||
import javax.persistence.JoinColumn;
|
import javax.persistence.JoinColumn;
|
||||||
import javax.persistence.OneToMany;
|
import javax.persistence.OneToMany;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A group of teaching assistants.
|
* A group of teaching assistants.
|
||||||
*/
|
*/
|
||||||
@Entity
|
@Entity
|
||||||
public class TeachingAssistantTeam extends Team<TeachingAssistant> {
|
public class TeachingAssistantTeam extends Team {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The role that this teaching assistant team plays.
|
* The role that this teaching assistant team plays.
|
||||||
|
@ -33,8 +35,10 @@ public class TeachingAssistantTeam extends Team<TeachingAssistant> {
|
||||||
*/
|
*/
|
||||||
public TeachingAssistantTeam() {}
|
public TeachingAssistantTeam() {}
|
||||||
|
|
||||||
@Override
|
public List<TeachingAssistant> getTeachingAssistants() {
|
||||||
public void addMember(TeachingAssistant person) {
|
List<Person> people = super.getMembers();
|
||||||
this.getMembers().add(person);
|
List<TeachingAssistant> teachingAssistants = new ArrayList<>(people.size());
|
||||||
|
people.forEach(person -> teachingAssistants.add((TeachingAssistant) person));
|
||||||
|
return teachingAssistants;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,7 @@ import java.util.List;
|
||||||
@Inheritance(
|
@Inheritance(
|
||||||
strategy = InheritanceType.JOINED
|
strategy = InheritanceType.JOINED
|
||||||
)
|
)
|
||||||
public abstract class Team<P extends Person> extends BasicEntity {
|
public abstract class Team extends BasicEntity {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The list of members in this group.
|
* The list of members in this group.
|
||||||
|
@ -30,7 +30,7 @@ public abstract class Team<P extends Person> extends BasicEntity {
|
||||||
joinColumns = @JoinColumn(name = "team_id"),
|
joinColumns = @JoinColumn(name = "team_id"),
|
||||||
inverseJoinColumns = @JoinColumn(name = "person_id")
|
inverseJoinColumns = @JoinColumn(name = "person_id")
|
||||||
)
|
)
|
||||||
protected List<P> members;
|
protected List<Person> members;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The course that this team belongs to. A team cannot exist on its own, it must belong to a course.
|
* The course that this team belongs to. A team cannot exist on its own, it must belong to a course.
|
||||||
|
@ -47,23 +47,23 @@ public abstract class Team<P extends Person> extends BasicEntity {
|
||||||
this.members = new ArrayList<>();
|
this.members = new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addMember(P person) {
|
public void addMember(Person person) {
|
||||||
if (!this.containsMember(person)) {
|
if (!this.containsMember(person)) {
|
||||||
this.members.add(person);
|
this.members.add(person);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addMembers(List<P> people) {
|
public void addMembers(List<Person> people) {
|
||||||
for (P person : people) {
|
for (Person person : people) {
|
||||||
this.addMember(person);
|
this.addMember(person);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean containsMember(P person) {
|
public boolean containsMember(Person person) {
|
||||||
return this.members.contains(person);
|
return this.members.contains(person);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removeMember(P person) {
|
public void removeMember(Person person) {
|
||||||
this.members.remove(person);
|
this.members.remove(person);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -79,7 +79,7 @@ public abstract class Team<P extends Person> extends BasicEntity {
|
||||||
* Gets a list of all members of this team.
|
* Gets a list of all members of this team.
|
||||||
* @return A list of all the members in this team.
|
* @return A list of all the members in this team.
|
||||||
*/
|
*/
|
||||||
public List<P> getMembers() {
|
public List<Person> getMembers() {
|
||||||
return this.members;
|
return this.members;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -90,7 +90,7 @@ public abstract class Team<P extends Person> extends BasicEntity {
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
for (P p : this.getMembers()) {
|
for (Person p : this.getMembers()) {
|
||||||
sb.append(p.getFullName()).append(", ");
|
sb.append(p.getFullName()).append(", ");
|
||||||
}
|
}
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
package nl.andrewlalis.teaching_assistant_assistant.model.repositories;
|
||||||
|
|
||||||
|
import nl.andrewlalis.teaching_assistant_assistant.model.people.Student;
|
||||||
|
import org.springframework.data.repository.CrudRepository;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
public interface StudentRepository extends CrudRepository<Student, Long> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tries to find a student by its unique student number.
|
||||||
|
* @param studentNumber The student number to search for.
|
||||||
|
* @return An optional Student object.
|
||||||
|
*/
|
||||||
|
public Optional<Student> findByStudentNumber(int studentNumber);
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
package nl.andrewlalis.teaching_assistant_assistant.model.repositories;
|
||||||
|
|
||||||
|
import nl.andrewlalis.teaching_assistant_assistant.model.people.teams.StudentTeam;
|
||||||
|
import org.springframework.data.repository.CrudRepository;
|
||||||
|
|
||||||
|
public interface StudentTeamRepository extends CrudRepository<StudentTeam, Long> {
|
||||||
|
}
|
|
@ -1,7 +1,10 @@
|
||||||
spring.jpa.hibernate.ddl-auto=create
|
spring.jpa.hibernate.ddl-auto=create-drop
|
||||||
#spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL57Dialect
|
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL57Dialect
|
||||||
|
spring.datasource.username=root
|
||||||
#spring.jpa.properties.hibernate.show_sql=true
|
spring.datasource.password=root
|
||||||
|
spring.datasource.url=jdbc:mysql://localhost:3306/teaching_assistant_assistant?serverTimezone=UTC
|
||||||
|
#
|
||||||
|
#spring.jpa.properties.hibernate.show_sql=false
|
||||||
#spring.jpa.properties.hibernate.use_sql_comments=true
|
#spring.jpa.properties.hibernate.use_sql_comments=true
|
||||||
#spring.jpa.properties.hibernate.format_sql=true
|
#spring.jpa.properties.hibernate.format_sql=true
|
||||||
#spring.jpa.properties.hibernate.type=trace
|
#spring.jpa.properties.hibernate.type=trace
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
<th>Name</th>
|
<th>Name</th>
|
||||||
<th>Code</th>
|
<th>Code</th>
|
||||||
<th>Created at</th>
|
<th>Created at</th>
|
||||||
|
<th>Students</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr th:each="course: ${courses}">
|
<tr th:each="course: ${courses}">
|
||||||
<td>
|
<td>
|
||||||
|
@ -18,6 +19,7 @@
|
||||||
</td>
|
</td>
|
||||||
<td th:text="${course.getCode()}"></td>
|
<td th:text="${course.getCode()}"></td>
|
||||||
<td th:text="${course.getCreatedOn()}"></td>
|
<td th:text="${course.getCreatedOn()}"></td>
|
||||||
|
<td th:text="${course.getStudents().size()}"></td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -41,6 +41,22 @@
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
<h3>All Students (<span th:text="${course.getStudents().size()}"></span>):</h3>
|
||||||
|
<table>
|
||||||
|
<tr th:each="student: ${course.getStudents()}">
|
||||||
|
<td>
|
||||||
|
<a
|
||||||
|
th:href="@{/students/{student_id}
|
||||||
|
(student_id=${student.getId()})}">
|
||||||
|
Student <span th:text="${student.getId()}"></span>
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td th:text="${student.getFullName()}"></td>
|
||||||
|
<td th:text="${student.getStudentNumber()}"></td>
|
||||||
|
<td th:text="${student.getEmailAddress()}"></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="sidebar">
|
<div id="sidebar">
|
||||||
|
|
Loading…
Reference in New Issue