Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 5 additions & 7 deletions src/main/java/app/Config.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,7 @@

import api.GradeDataBase;
import api.MongoGradeDataBase;
import usecase.FormTeamUseCase;
import usecase.GetAverageGradeUseCase;
import usecase.GetGradeUseCase;
import usecase.GetTopGradeUseCase;
import usecase.JoinTeamUseCase;
import usecase.LeaveTeamUseCase;
import usecase.LogGradeUseCase;
import usecase.*;

/**
* Config class to provide use cases with the necessary dependencies.
Expand Down Expand Up @@ -66,4 +60,8 @@ public GetAverageGradeUseCase getAverageGradeUseCase() {
}

// TODO Task 4: add code for the new GetTopGradeUseCase following the same pattern as the other use cases above.

public GetTopGradeUseCase getTopGradeUseCase() {return new GetTopGradeUseCase(gradeDataBase);}

public GetMinGradeUseCase getMinGradeUseCase() {return new GetMinGradeUseCase(gradeDataBase);}
}
54 changes: 44 additions & 10 deletions src/main/java/app/gui/Application.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,7 @@
import api.MongoGradeDataBase;
import app.Config;
import entity.Grade;
import usecase.FormTeamUseCase;
import usecase.GetAverageGradeUseCase;
import usecase.GetGradeUseCase;
import usecase.JoinTeamUseCase;
import usecase.LeaveTeamUseCase;
import usecase.LogGradeUseCase;
import usecase.*;

/**
* GUI class to run the GUI for the Grade App.
Expand Down Expand Up @@ -55,6 +50,8 @@ public static void main(String[] args) {
final JoinTeamUseCase joinTeamUseCase = config.joinTeamUseCase();
final LeaveTeamUseCase leaveTeamUseCase = config.leaveTeamUseCase();
final GetAverageGradeUseCase getAverageGradeUseCase = config.getAverageGradeUseCase();
final GetTopGradeUseCase getTopGradeUseCase = config.getTopGradeUseCase();
final GetMinGradeUseCase getMinGradeUseCase = config.getMinGradeUseCase();

// this is the code that runs to set up our GUI
SwingUtilities.invokeLater(() -> {
Expand All @@ -70,7 +67,7 @@ public static void main(String[] args) {
final JPanel logGradeCard = createLogGradeCard(frame, logGradeUseCase);
final JPanel formTeamCard = createFormTeamCard(frame, formTeamUseCase);
final JPanel joinTeamCard = createJoinTeamCard(frame, joinTeamUseCase);
final JPanel manageTeamCard = createManageTeamCard(frame, leaveTeamUseCase, getAverageGradeUseCase);
final JPanel manageTeamCard = createManageTeamCard(frame, leaveTeamUseCase, getAverageGradeUseCase, getTopGradeUseCase, getMinGradeUseCase);

cardPanel.add(defaultCard, "DefaultCard");
cardPanel.add(getGradeCard, "GetGradeCard");
Expand Down Expand Up @@ -321,16 +318,20 @@ public void actionPerformed(ActionEvent e) {
return theCard;
}

// TODO Task 4: modify this method so that it takes in a getTopGradeUseCase
// Note: this will require you to update the code that calls this method.
// TODO Task 4: modify this method so that it takes in a getTopGradeUseCase
// Note: this will require you to update the code that calls this method.
private static JPanel createManageTeamCard(JFrame jFrame, LeaveTeamUseCase leaveTeamUseCase,
GetAverageGradeUseCase getAverageGradeUseCase) {
GetAverageGradeUseCase getAverageGradeUseCase,
GetTopGradeUseCase getTopGradeUseCase,
GetMinGradeUseCase getMinGradeUseCase) {
final JPanel theCard = new JPanel();
theCard.setLayout(new GridLayout(ROWS, COLS));
final JTextField courseField = new JTextField(20);
// make a separate line.
final JButton getAverageButton = new JButton("Get Average Grade");
// TODO Task 4: Add another button for "Get Top Grade" (check the getAverageButton for example)
final JButton getTopGradeButton = new JButton("Get Top Grade");
final JButton getMinGradeButton = new JButton("Get Minimum Grade");

final JButton leaveTeamButton = new JButton("Leave Team");
final JLabel resultLabel = new JLabel();
Expand Down Expand Up @@ -358,6 +359,37 @@ public void actionPerformed(ActionEvent e) {

// TODO Task 4: Add action listener for getTopGrade button, follow example of getAverageButton

getTopGradeButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
final String course = courseField.getText();

try {
final float max = getTopGradeUseCase.getTopGrade(course);
JOptionPane.showMessageDialog(jFrame, "Top Grade: " + max);
courseField.setText("");
}
catch (JSONException ex) {
JOptionPane.showMessageDialog(jFrame, ex.getMessage());
}

}
});

getMinGradeButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
final String course = courseField.getText();

try {
final float min = getTopGradeUseCase.getTopGrade(course);
JOptionPane.showMessageDialog(jFrame, "Top Grade: " + min);
courseField.setText("");
}
catch (JSONException ex) {
JOptionPane.showMessageDialog(jFrame, ex.getMessage());
}
}
});

leaveTeamButton.addActionListener(new ActionListener() {
/**
* Invoked when an action occurs.
Expand All @@ -380,6 +412,8 @@ public void actionPerformed(ActionEvent e) {
theCard.add(courseField);
theCard.add(getAverageButton);
theCard.add(leaveTeamButton);
theCard.add(getTopGradeButton);
theCard.add(getMinGradeButton);
theCard.add(resultLabel);
return theCard;

Expand Down
5 changes: 3 additions & 2 deletions src/main/java/example/GetToken.java
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
package example;
import java.io.IOException;

/**
* Class for getting your Grade API token.
Expand All @@ -9,13 +10,13 @@ public class GetToken {
* Run to get your token after you complete the code.
* @param args unused arguments
*/
public static void main(String[] args) {
public static void main(String[] args) throws IOException {
GetExample example = new GetExample();

String gradeAPISignUpURL = "https://grade-apis.panchen.ca/signUp";
// TODO Task 1: use the run method to get your Grade API token (or obtain your token through a web browser).
String response = "";
// response = example.run( ...)
// response = example.run(gradeAPISignUpURL);
System.out.println(response);
}
}
43 changes: 43 additions & 0 deletions src/main/java/usecase/GetMinGradeUseCase.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package usecase;

import api.GradeDataBase;
import entity.Grade;
import entity.Team;

/**
* GetMinGradeUseCase class.
*/
public final class GetMinGradeUseCase {
private final GradeDataBase gradeDataBase;

public GetMinGradeUseCase(GradeDataBase gradeDataBase) {
this.gradeDataBase = gradeDataBase;
}

/**
* Get the lowest grade for a course across your team.
* @param course The course.
* @return The top grade.
*/
public float getMinGrade(String course) {
// Call the API to get the usernames of all your team members
float min = 99999;
final Team team = gradeDataBase.getMyTeam();
// Call the API to get all the grades for the course for all your team members
for (String username : team.getMembers()) {
// Call the API to get the grade for the course for the username
final Grade[] grades = gradeDataBase.getGrades(username);
for (Grade grade : grades) {

if (grade.getCourse().equals(course)) {
// Sum all the grades
if (grade.getGrade() < min) {
min = grade.getGrade();
}
}
}
}
return min;
}
}