Skip to content

Commit

Permalink
Merge pull request #101 from chunzkok/v1.2b-WrapUp
Browse files Browse the repository at this point in the history
Link Assignments to Student to show live updates to the Assignment system
  • Loading branch information
bojie3 authored Mar 16, 2023
2 parents 81456f4 + c1c9e48 commit e305302
Show file tree
Hide file tree
Showing 8 changed files with 144 additions and 24 deletions.
26 changes: 18 additions & 8 deletions src/main/java/taa/assignment/Assignment.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
public class Assignment {
private String name;
private ArrayList<Submission> submissions = new ArrayList<>();
private final HashMap<Integer, Submission> submissionMap = new HashMap<>();
private final HashMap<Student, Submission> submissionMap = new HashMap<>();


/**
Expand All @@ -23,30 +23,40 @@ public class Assignment {
public Assignment(String name, FilteredList<Student> sl) {
this.name = name;
for (Student stu : sl) {
Submission sub = new Submission(stu.getId());
Submission sub = new Submission(stu, this);
submissions.add(sub);
submissionMap.put(stu.getId(), sub);
stu.addSubmission(sub);
submissionMap.put(stu, sub);
}
}

/**
* Grades a student submission of an assignment.
*
* @param studentId
* @param student
* @param marks
*/
public void gradeSubmission(int studentId, int marks) throws CommandException {
if (submissionMap.containsKey(studentId)) {
submissionMap.get(studentId).grade(marks);
public void gradeSubmission(Student student, int marks) throws CommandException {
if (submissionMap.containsKey(student)) {
submissionMap.get(student).grade(marks);
} else {
throw new CommandException("Submission of " + studentId + "not found");
throw new CommandException("Submission of " + student.getName().fullName + " not found");
}
}

public ArrayList<Submission> getSubmissions() {
return this.submissions;
}

/**
* Ties up loose end to prepare this Assignment for deletion.
*/
public void delete() {
submissionMap.forEach((student, submission) -> {
student.deleteSubmission(submission);
});
}

@Override
public String toString() {
return this.name;
Expand Down
10 changes: 6 additions & 4 deletions src/main/java/taa/assignment/AssignmentList.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,20 +35,22 @@ public void delete(String assignmentName) throws CommandException {
if (!assignmentMap.containsKey(assignmentName)) {
throw new CommandException("Assignment: " + assignmentName + " not found");
} else {
assignments.remove(assignmentMap.remove(assignmentName));
Assignment removed = assignmentMap.remove(assignmentName);
removed.delete();
assignments.remove(removed);
}
}

/**
* @param assignmentName
* @param studentId
* @param student
* @param marks
*/
public void grade(String assignmentName, int studentId, int marks) throws CommandException {
public void grade(String assignmentName, Student student, int marks) throws CommandException {
if (!assignmentMap.containsKey(assignmentName)) {
throw new CommandException("Assignment: " + assignmentName + " not found");
} else {
assignmentMap.get(assignmentName).gradeSubmission(studentId, marks);
assignmentMap.get(assignmentName).gradeSubmission(student, marks);
}
}
// TODO: delete student from classList = must delete all submissions of studentId for all assignments.
Expand Down
34 changes: 28 additions & 6 deletions src/main/java/taa/assignment/Submission.java
Original file line number Diff line number Diff line change
@@ -1,18 +1,26 @@
package taa.assignment;

import java.util.Date;

import taa.model.student.Student;

/**
* An assignment submission
*/
public class Submission {
public class Submission implements Comparable<Submission> {
private boolean isGraded = false;
private int marks = 0;
private int studentId;
private Assignment assignment;
private Student student;
private Date time;

/**
* @param studentId
* @param student The student who made this submission.
*/
public Submission(int studentId) {
this.studentId = studentId;
public Submission(Student student, Assignment assignment) {
this.student = student;
this.assignment = assignment;
this.time = new Date();
}

/**
Expand All @@ -21,11 +29,25 @@ public Submission(int studentId) {
public void grade(int marks) {
isGraded = true;
this.marks = marks;
this.time = new Date();
}

/**
* Describes the assignment this submission belongs to, along with details of this submission.
*/
public String describeSubmission() {
String gradeStatus = this.isGraded ? Integer.toString(marks) : "Ungraded";
return String.format("%s (Grade: %s)", this.assignment.toString(), gradeStatus);
}

@Override
public String toString() {
char gradeChar = isGraded ? 'X' : ' ';
return String.format("[%c] Student %d: %d marks.", gradeChar, studentId, marks);
return String.format("[%c] %s: %d marks.", gradeChar, student.getName().fullName, marks);
}

@Override
public int compareTo(Submission otherSubmission) {
return this.time.compareTo(otherSubmission.time);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ public class DeleteAssignmentCommand extends Command {

public static final String COMMAND_WORD = "delete_asgn";

public static final String MESSAGE_USAGE = "Format: asgn_delete n/{name}";
public static final String MESSAGE_USAGE = "Format: delete_asgn n/{name}";
public static final String MESSAGE_DELETE_ASSIGNMENT_SUCCESS = "Assignment: %s Deleted.";
private final String assignmentName;

Expand Down
11 changes: 10 additions & 1 deletion src/main/java/taa/model/ModelManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import taa.assignment.AssignmentList;
import taa.commons.core.GuiSettings;
import taa.commons.core.LogsCenter;
import taa.commons.core.index.Index;
import taa.commons.util.CollectionUtil;
import taa.logic.commands.exceptions.CommandException;
import taa.model.student.Name;
Expand Down Expand Up @@ -219,16 +220,24 @@ public boolean equals(Object obj) {
@Override
public void addAssignment(String assignmentName) throws CommandException {
assignmentList.add(assignmentName, filteredStudents);
for (Student student : filteredStudents) {
updateStudent(student);
}
}

@Override
public void deleteAssignment(String assignmentName) throws CommandException {
assignmentList.delete(assignmentName);
for (Student student : filteredStudents) {
updateStudent(student);
}
}

@Override
public void grade(String assignmentName, int studentId, int marks) throws CommandException {
assignmentList.grade(assignmentName, studentId, marks);
Student student = this.filteredStudents.get(Index.fromOneBased(studentId).getZeroBased());
assignmentList.grade(assignmentName, student, marks);
updateStudent(student);
}

@Override
Expand Down
27 changes: 25 additions & 2 deletions src/main/java/taa/model/student/Student.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import java.util.Objects;
import java.util.Set;

import taa.assignment.Submission;
import taa.commons.util.CollectionUtil;
import taa.model.tag.Tag;

Expand All @@ -19,10 +20,10 @@ public class Student {
private final Name name;
private final int id;

private final Attendance atd;

// Data fields
private final Attendance atd;
private final Set<Tag> classTags = new HashSet<>();
private final Submissions submissions;

/**
* Every field must be present and not null.
Expand All @@ -33,6 +34,7 @@ public Student(Name name, Set<Tag> classTags) {
this.name = name;
this.atd = new Attendance();
this.classTags.addAll(classTags);
this.submissions = new Submissions();
}

public int getId() {
Expand Down Expand Up @@ -66,6 +68,27 @@ public void addClassTag(Tag newClass) {
this.classTags.add(newClass);
}

/**
* Attributes a new submission to this student.
*/
public void addSubmission(Submission submission) {
this.submissions.addSubmission(submission);
}

/**
* Removes a submission attributed to this student.
*/
public void deleteSubmission(Submission submission) {
this.submissions.deleteSubmission(submission);
}

/**
* Returns the latest submission by this student.
*/
public Submission getLatestSubmission() {
return this.submissions.getLatestSubmission();
}

/**
* Returns true if both persons have the same name.
* This defines a weaker notion of equality between two persons.
Expand Down
51 changes: 51 additions & 0 deletions src/main/java/taa/model/student/Submissions.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package taa.model.student;

import java.util.ArrayList;
import java.util.List;

import taa.assignment.Submission;

/**
* A list of Submissions belonging to a Student.
*/
public class Submissions {
private List<Submission> submissions;

public Submissions() {
this.submissions = new ArrayList<>();
}

/**
* @param submissions A list containing Submissions.
*/
public Submissions(List<Submission> submissions) {
this.submissions = submissions;
}

/**
* Adds a submission.
*/
public void addSubmission(Submission submission) {
this.submissions.add(submission);
}

/**
* Removes a submission.
*/
public void deleteSubmission(Submission submission) {
this.submissions.remove(submission);
}

/**
* Returns the latest submission.
*/
public Submission getLatestSubmission() {
Submission latestSubmission = null;
for (Submission submission : this.submissions) {
if (latestSubmission == null || submission.compareTo(latestSubmission) > 0) {
latestSubmission = submission;
}
}
return latestSubmission;
}
}
7 changes: 5 additions & 2 deletions src/main/java/taa/ui/StudentCard.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import javafx.scene.layout.FlowPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Region;
import taa.assignment.Submission;
import taa.model.student.Student;

/**
Expand Down Expand Up @@ -47,11 +48,13 @@ public class StudentCard extends UiPart<Region> {
public StudentCard(Student student, int displayedIndex) {
super(FXML);
this.student = student;
Submission latestSubmission = student.getLatestSubmission();
id.setText(displayedIndex + ". ");
name.setText(student.getName().fullName);
attendance.setText(String.format("Attendance: %d/12", this.student.getNumWeeksPresent()));
assignment.setText("Latest assignment submission: xxx");
groups.setText("Groups: Group xxx");
assignment.setText("Latest assignment: "
+ (latestSubmission == null ? "None" : latestSubmission.describeSubmission()));
groups.setText("Groups: None");
student.getClassTags().stream()
.sorted(Comparator.comparing(classTag -> classTag.tagName))
.forEach(classTag -> tags.getChildren().add(new Label(classTag.tagName)));
Expand Down

0 comments on commit e305302

Please sign in to comment.