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
25 changes: 21 additions & 4 deletions src/main/java/api/MongoGradeDataBase.java
Original file line number Diff line number Diff line change
Expand Up @@ -261,13 +261,30 @@ public Team getMyTeam() {
.addHeader(CONTENT_TYPE, APPLICATION_JSON)
.build();

final Response response;
final JSONObject responseBody;
try {
final Response response = client.newCall(request).execute();
final JSONObject responseBody = new JSONObject(response.body().string());

// TODO Task 3b: Implement the logic to get the team information
if (responseBody.getInt(STATUS_CODE) == SUCCESS_CODE) {
final JSONObject team = responseBody.getJSONObject("team");
final JSONArray membersArray = team.getJSONArray("members");
final String[] members = new String[membersArray.length()];
for (int i = 0; i < membersArray.length(); i++) {
members[i] = membersArray.getString(i);
}
return Team.builder()
.name(team.getString(NAME))
.members(members)
.build();
} else {
throw new RuntimeException(responseBody.getString(MESSAGE));
}
}
catch (IOException | JSONException event) {
throw new RuntimeException(event);
}
// HINT 1: Look at the formTeam method to get an idea on how to parse the response
// HINT 2: You may find it useful to just initially print the contents of the JSON
// then work on the details of how to parse it.
return null;
}
}
3 changes: 3 additions & 0 deletions src/main/java/app/Config.java
Original file line number Diff line number Diff line change
Expand Up @@ -66,4 +66,7 @@ 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);
}
}
25 changes: 23 additions & 2 deletions src/main/java/app/gui/Application.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import usecase.JoinTeamUseCase;
import usecase.LeaveTeamUseCase;
import usecase.LogGradeUseCase;
import usecase.GetTopGradeUseCase;

/**
* GUI class to run the GUI for the Grade App.
Expand Down Expand Up @@ -55,6 +56,7 @@ 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();

// this is the code that runs to set up our GUI
SwingUtilities.invokeLater(() -> {
Expand All @@ -70,7 +72,8 @@ 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);

cardPanel.add(defaultCard, "DefaultCard");
cardPanel.add(getGradeCard, "GetGradeCard");
Expand Down Expand Up @@ -324,13 +327,16 @@ public void actionPerformed(ActionEvent e) {
// 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) {
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 leaveTeamButton = new JButton("Leave Team");
final JLabel resultLabel = new JLabel();
Expand All @@ -356,6 +362,20 @@ public void actionPerformed(ActionEvent e) {
}
});

getTopGradeButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
final String course = courseField.getText();
try {
final float top = getTopGradeUseCase.getTopGrade(course);
JOptionPane.showMessageDialog(jFrame, "Top Grade: " + top);
courseField.setText("");
} catch (org.json.JSONException ex) {
JOptionPane.showMessageDialog(jFrame, ex.getMessage());
}
}
});

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

leaveTeamButton.addActionListener(new ActionListener() {
Expand All @@ -379,6 +399,7 @@ public void actionPerformed(ActionEvent e) {
theCard.add(new JLabel("The course you want to calculate the team average for:"));
theCard.add(courseField);
theCard.add(getAverageButton);
theCard.add(getTopGradeButton);
theCard.add(leaveTeamButton);
theCard.add(resultLabel);
return theCard;
Expand Down
13 changes: 13 additions & 0 deletions src/main/java/usecase/GetAverageGradeUseCase.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,19 @@ public float getAverageGrade(String course) {
// TODO Task 3a: Complete the logic of calculating the average course grade for
// your team members. Hint: the getGrades method might be useful.

for (String username : team.getMembers()) {
final Grade[] grades = gradeDataBase.getGrades(username);
if (grades == null) {
continue;
}
for (Grade g : grades) {
if (g.getCourse().equals(course)) {
sum += g.getGrade();
count += 1;
}
}
}

if (count == 0) {
return 0;
}
Expand Down