diff --git a/src/main/java/app/Config.java b/src/main/java/app/Config.java index 12df0fd5..db68ec4d 100644 --- a/src/main/java/app/Config.java +++ b/src/main/java/app/Config.java @@ -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. @@ -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);} } diff --git a/src/main/java/app/gui/Application.java b/src/main/java/app/gui/Application.java index ff61dddc..857ae29b 100644 --- a/src/main/java/app/gui/Application.java +++ b/src/main/java/app/gui/Application.java @@ -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. @@ -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(() -> { @@ -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"); @@ -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(); @@ -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. @@ -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; diff --git a/src/main/java/example/GetToken.java b/src/main/java/example/GetToken.java index 0fe4639f..f699552b 100644 --- a/src/main/java/example/GetToken.java +++ b/src/main/java/example/GetToken.java @@ -1,4 +1,5 @@ package example; +import java.io.IOException; /** * Class for getting your Grade API token. @@ -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); } } diff --git a/src/main/java/usecase/GetMinGradeUseCase.java b/src/main/java/usecase/GetMinGradeUseCase.java new file mode 100644 index 00000000..053baaeb --- /dev/null +++ b/src/main/java/usecase/GetMinGradeUseCase.java @@ -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; + } +} +