Skip to content

Commit 5116984

Browse files
authored
Merge pull request #1130 from johnbrvc/i1109_report_scoreboard_json_wrong
Fix missing state information in scoreboard JSON report
2 parents b19801d + 7e65c49 commit 5116984

File tree

11 files changed

+190
-46
lines changed

11 files changed

+190
-46
lines changed

src/edu/csus/ecs/pc2/clics/API202306/CLICSContestState.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import java.util.Calendar;
55
import java.util.Date;
66

7+
import com.fasterxml.jackson.annotation.JsonCreator;
78
import com.fasterxml.jackson.annotation.JsonInclude;
89
import com.fasterxml.jackson.annotation.JsonProperty;
910
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -67,6 +68,14 @@ public class CLICSContestState {
6768
@JsonProperty
6869
private String contest_time;
6970

71+
/**
72+
* Provide empty constructor for Jackson deserialization
73+
*/
74+
@JsonCreator
75+
public CLICSContestState() {
76+
77+
}
78+
7079
/**
7180
* Fill in properties for contest state as per 2023-06 spec
7281
*

src/edu/csus/ecs/pc2/clics/API202306/CLICSProblemScore.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
import java.util.HashMap;
55

6+
import com.fasterxml.jackson.annotation.JsonCreator;
67
import com.fasterxml.jackson.annotation.JsonProperty;
78

89
import edu.csus.ecs.pc2.core.StringUtilities;
@@ -39,6 +40,14 @@ public class CLICSProblemScore {
3940
@JsonProperty
4041
private int time;
4142

43+
/**
44+
* Provide empty constructor for Jackson deserialization
45+
*/
46+
@JsonCreator
47+
public CLICSProblemScore() {
48+
49+
}
50+
4251
/**
4352
* Fill in API problem score information properties (for scoreboard endpoint)
4453
*
@@ -74,4 +83,28 @@ private boolean toBool(String strBool, boolean defaultBool) {
7483
return defaultBool;
7584
}
7685
}
86+
87+
public String getProblem_id() {
88+
return problem_id;
89+
}
90+
91+
public int getNum_judged() {
92+
return num_judged;
93+
}
94+
95+
public int getNum_pending() {
96+
return num_pending;
97+
}
98+
99+
public boolean isSolved() {
100+
return solved;
101+
}
102+
103+
public int getTime() {
104+
return time;
105+
}
106+
107+
public void setTime(int time) {
108+
this.time = time;
109+
}
77110
}

src/edu/csus/ecs/pc2/clics/API202306/CLICSScore.java

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright (C) 1989-2025 PC2 Development Team: John Clevenger, Douglas Lane, Samir Ashoo, and Troy Boudreau.
22
package edu.csus.ecs.pc2.clics.API202306;
33

4+
import com.fasterxml.jackson.annotation.JsonCreator;
45
import com.fasterxml.jackson.annotation.JsonInclude;
56
import com.fasterxml.jackson.annotation.JsonProperty;
67

@@ -27,20 +28,41 @@ public class CLICSScore {
2728
// private int score;
2829

2930
@JsonProperty
30-
private String time;
31+
private int time;
32+
33+
/**
34+
* Provide empty constructor for Jackson deserialization
35+
*/
36+
@JsonCreator
37+
public CLICSScore() {
38+
39+
}
3140

3241
/**
3342
* Fill in the properties for a team's score
3443
*
3544
* @param teamStanding The team's scoring information
45+
* @throws NumberFormatException if bad scores are in the standings
3646
*/
3747
public CLICSScore(TeamStanding teamStanding) {
3848
num_solved = Utilities.nullSafeToInt(teamStanding.getSolved(), 0);
39-
total_time = Utilities.nullSafeToInt(teamStanding.getPoints(), 0);
49+
total_time = Integer.parseInt(teamStanding.getPoints());
4050
if(num_solved > 0) {
4151
// Problem solution time is in minutes.
42-
time = teamStanding.getLastSolved();
52+
time = Integer.parseInt(teamStanding.getLastSolved());
4353
}
4454
}
4555

56+
public int getNum_solved() {
57+
return num_solved;
58+
}
59+
60+
public int getTotal_time() {
61+
return total_time;
62+
}
63+
64+
public int getTime() {
65+
return time;
66+
}
67+
4668
}

src/edu/csus/ecs/pc2/clics/API202306/CLICSScoreboard.java

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,18 @@
66
import java.time.ZonedDateTime;
77
import java.time.format.DateTimeFormatter;
88
import java.util.ArrayList;
9+
import java.util.Arrays;
910
import java.util.HashMap;
1011
import java.util.List;
1112
import java.util.Properties;
1213

1314
import javax.xml.bind.JAXBException;
1415

16+
import com.fasterxml.jackson.annotation.JsonCreator;
1517
import com.fasterxml.jackson.annotation.JsonInclude;
1618
import com.fasterxml.jackson.annotation.JsonProperty;
1719
import com.fasterxml.jackson.databind.ObjectMapper;
1820

19-
import edu.csus.ecs.pc2.core.IInternalController;
2021
import edu.csus.ecs.pc2.core.exception.IllegalContestState;
2122
import edu.csus.ecs.pc2.core.log.StaticLog;
2223
import edu.csus.ecs.pc2.core.model.Group;
@@ -49,11 +50,19 @@ public class CLICSScoreboard {
4950
@JsonProperty
5051
private CLICSScoreboardRow [] rows;
5152

53+
/**
54+
* Provide empty constructor for Jackson deserialization
55+
*/
56+
@JsonCreator
57+
public CLICSScoreboard() {
58+
59+
}
60+
5261
/**
5362
* Fill in the scoreboard information
5463
*
5564
*/
56-
public CLICSScoreboard(IInternalContest model, IInternalController controller, Group group, Integer division) throws IllegalContestState, JAXBException, IOException {
65+
public CLICSScoreboard(IInternalContest model, Group group, Integer division) throws IllegalContestState, JAXBException, IOException {
5766

5867
DefaultScoringAlgorithm scoringAlgorithm = new DefaultScoringAlgorithm();
5968

@@ -116,6 +125,15 @@ public CLICSScoreboard(IInternalContest model, IInternalController controller, G
116125
}
117126
}
118127

128+
/**
129+
* Get the per-team scoreboard rows as a List
130+
*
131+
* @return List of scoreboard rows
132+
*/
133+
public List<CLICSScoreboardRow> getRows() {
134+
return Arrays.asList(rows);
135+
}
136+
119137
public String toJSON() {
120138

121139
try {

src/edu/csus/ecs/pc2/clics/API202306/CLICSScoreboardRow.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@
22
package edu.csus.ecs.pc2.clics.API202306;
33

44
import java.util.ArrayList;
5+
import java.util.Arrays;
56
import java.util.HashMap;
7+
import java.util.List;
68

9+
import com.fasterxml.jackson.annotation.JsonCreator;
710
import com.fasterxml.jackson.annotation.JsonInclude;
811
import com.fasterxml.jackson.annotation.JsonProperty;
912

@@ -33,6 +36,14 @@ public class CLICSScoreboardRow {
3336
@JsonProperty
3437
private CLICSProblemScore [] problems;
3538

39+
/**
40+
* Provide empty constructor for Jackson deserialization
41+
*/
42+
@JsonCreator
43+
public CLICSScoreboardRow() {
44+
45+
}
46+
3647
/**
3748
* Fill in API scoreboard row information properties (for scoreboard endpoint)
3849
*
@@ -51,4 +62,20 @@ public CLICSScoreboardRow(HashMap<String, String> probEleToShortName, TeamStandi
5162
}
5263
problems = pslist.toArray(new CLICSProblemScore[0]);
5364
}
65+
66+
public int getRank() {
67+
return rank;
68+
}
69+
70+
public String getTeam_id() {
71+
return team_id;
72+
}
73+
74+
public CLICSScore getScore() {
75+
return score;
76+
}
77+
78+
public List<CLICSProblemScore> getProblems() {
79+
return Arrays.asList(problems);
80+
}
5481
}

src/edu/csus/ecs/pc2/clics/API202306/ScoreboardService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ public Response getScoreboard(@Context HttpServletRequest servletRequest, @Conte
104104

105105
// ok to return scoreboard
106106
try {
107-
CLICSScoreboard scoreboard = new CLICSScoreboard(model, controller, specificGroup, divNumber);
107+
CLICSScoreboard scoreboard = new CLICSScoreboard(model, specificGroup, divNumber);
108108
return Response.ok(scoreboard.toJSON(), MediaType.APPLICATION_JSON).build();
109109
} catch (IllegalContestState | JAXBException | IOException e) {
110110
controller.getLog().log(Log.WARNING, "Exception creating PC2 scoreboard JSON: " + e.getMessage(), e);

src/edu/csus/ecs/pc2/core/report/ExportFilesUtilities.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import java.util.List;
99
import java.util.logging.Level;
1010

11+
import edu.csus.ecs.pc2.clics.API202306.CLICSScoreboard;
1112
import edu.csus.ecs.pc2.clics.API202306.EventFeedJSON;
1213
import edu.csus.ecs.pc2.clics.API202306.JSONTool;
1314
import edu.csus.ecs.pc2.core.Constants;
@@ -16,11 +17,8 @@
1617
import edu.csus.ecs.pc2.core.execute.ExecuteUtilities;
1718
import edu.csus.ecs.pc2.core.imports.clics.CLICSAward;
1819
import edu.csus.ecs.pc2.core.imports.clics.CLICSAwardUtilities;
19-
import edu.csus.ecs.pc2.core.imports.clics.CLICSScoreboard;
2020
import edu.csus.ecs.pc2.core.log.StaticLog;
2121
import edu.csus.ecs.pc2.core.model.IInternalContest;
22-
import edu.csus.ecs.pc2.core.standings.ContestStandings;
23-
import edu.csus.ecs.pc2.core.standings.ScoreboardUtilities;
2422
import edu.csus.ecs.pc2.exports.ccs.ResultsFile;
2523

2624
public class ExportFilesUtilities {
@@ -64,9 +62,8 @@ public static String[] writeResultsFiles(IInternalContest contest, String output
6462
}
6563

6664
try {
67-
ContestStandings contestStandings = ScoreboardUtilities.createContestStandings(contest);
68-
CLICSScoreboard clicsScoreboard = new CLICSScoreboard(contestStandings);
69-
String json = clicsScoreboard.toString();
65+
CLICSScoreboard clicsScoreboard = new CLICSScoreboard(contest, null, null);
66+
String json = clicsScoreboard.toJSON();
7067
String[] sa = { json };
7168
FileUtilities.writeFileContents(scoreboardJsonFilename, sa);
7269

0 commit comments

Comments
 (0)