javadoc created

This commit is contained in:
Joshua Perry 2023-02-05 21:37:34 +00:00
parent 8767b8b498
commit 65bae824a5
1 changed files with 184 additions and 117 deletions

View File

@ -19,20 +19,40 @@ import com.r0r5chach.competitor.r6.R6Defender;
import com.r0r5chach.competitor.r6.R6Player; import com.r0r5chach.competitor.r6.R6Player;
import com.r0r5chach.competitor.valorant.ValorantAgent; import com.r0r5chach.competitor.valorant.ValorantAgent;
import com.r0r5chach.competitor.valorant.ValorantPlayer; import com.r0r5chach.competitor.valorant.ValorantPlayer;
/**
* Class that defines the various attributes and methods associated with a list of Competitors
* @author r0r5chach
*/
public class CompetitorList { public class CompetitorList {
/**
* Attribute that stores an Array of Competitors
*/
private final ArrayList<Competitor> competitors; private final ArrayList<Competitor> competitors;
/**
* Attribute that stores the report on the held Competitors
*/
private String reportContents; private String reportContents;
/**
* Constructs a CompetitorList Object by creating a new Array and defining the report as the stored template
* @throws IOException if the template cannot be loaded
*/
public CompetitorList() throws IOException { public CompetitorList() throws IOException {
competitors = new ArrayList<>(); competitors = new ArrayList<>();
reportContents = reportTemplate(); reportContents = reportTemplate();
} }
/**
* Gets the Array of competitors
* @return the Array of competitors
*/
public ArrayList<Competitor> getCompetitors() { public ArrayList<Competitor> getCompetitors() {
return competitors; return competitors;
} }
/**
* Read the target file and add any competitors found into the Array
* @param list the file to be read
* @throws FileNotFoundException if the file cannot be found
*/
public void readCompetitors(File list) throws FileNotFoundException { public void readCompetitors(File list) throws FileNotFoundException {
Scanner reader = new Scanner(list); Scanner reader = new Scanner(list);
@ -45,116 +65,12 @@ public class CompetitorList {
} }
reader.close(); reader.close();
} }
/**
private ValorantPlayer parseValorantPlayer(String[] row) { * Create a text file containing a report on the currently held competitors at the specified path
int playerNumber = Integer.parseInt(row[0]); * @param pathString the absolute path of the folder the report should be made in
Name playerName = new Name(row[1]); * @return the text file
Rank playerLevel = Rank.valueOf(row[2]); * @throws IOException if the file cannot be made at that path
ValorantAgent favoriteAgent = ValorantAgent.valueOf(row[3]); */
int[] scores = parseScores(row[4]);
return new ValorantPlayer(playerNumber, playerName, playerLevel, favoriteAgent, scores);
}
private R6Player parseR6Player(String[] row) {
int playerNumber = Integer.parseInt(row[0]);
Name playerName = new Name(row[1]);
Rank playerLevel = Rank.valueOf(row[2]);
R6Attacker favoriteAttacker = R6Attacker.valueOf(row[3]);
R6Defender favoriteDefender = R6Defender.valueOf(row[4]);
int[] scores = parseScores(row[5]);
return new R6Player(playerNumber, playerName, playerLevel, favoriteAttacker, favoriteDefender, scores);
}
private int[] parseScores(String row) {
String[] scores = row.split(",");
int[] parsedScores = new int[scores.length];
for (int i = 0; i < scores.length; i++) {
parsedScores[i] = Integer.parseInt(scores[i]);
}
return parsedScores;
}
private String generateTable() {
StringBuilder table = new StringBuilder("Competitor Level Scores Overall Favorite Character(s)");
Competitor best = null;
double bestScore = 0;
Rank bestRank = Rank.BRONZE;
List<Rank> ranks = Arrays.asList(Rank.values());
for (Competitor player: getCompetitors()) {
if (player.getOverallScore() > bestScore) {
best = player;
bestScore = player.getOverallScore();
bestRank = player.getPlayerLevel();
}
else if (player.getOverallScore() == bestScore) {
if (ranks.indexOf(player.getPlayerLevel()) > ranks.indexOf(bestRank)) {
best = player;
bestScore = player.getOverallScore();
bestRank = player.getPlayerLevel();
}
}
table.append("\n");
table.append(player.getShortDetails()).append(" ");
}
table.append("\n\n").append(best.getFullDetails());
return table.toString();
}
private int[] generateLevelFreqs() {
int[] freqs = {0, 0, 0, 0};
for (Competitor player: getCompetitors()) {
switch (player.getPlayerLevel()) {
case BRONZE -> freqs[0] += 1;
case SILVER -> freqs[1] += 1;
case GOLD -> freqs[2] += 1;
case PLATINUM -> freqs[3] += 1;
default -> throw new IllegalArgumentException("Unexpected value: " + player.getPlayerLevel());
}
}
return freqs;
}
private int[] generateScoreFreqs() {
int[] freqs = {0, 0, 0, 0, 0, 0};
for (Competitor player: getCompetitors()) {
for (int score: player.getScores()) {
switch (score) {
case 0 -> freqs[0] += 1;
case 1 -> freqs[1] += 1;
case 2 -> freqs[2] += 1;
case 3 -> freqs[3] += 1;
case 4 -> freqs[4] += 1;
case 5 -> freqs[5] += 1;
}
}
}
return freqs;
}
private double generateAverageScore() {
double avg = 0;
int totalScores = 0;
for (Competitor player: getCompetitors()) {
for (int score: player.getScores()) {
totalScores += 1;
avg += score;
}
}
avg /= totalScores;
return avg;
}
private double getHighScore() {
double hS = 0;
for (Competitor player: getCompetitors()) {
if (player.getOverallScore() > hS) {
hS = player.getOverallScore();
}
}
return hS;
}
public File createReportFile(String pathString) throws IOException { public File createReportFile(String pathString) throws IOException {
boolean exists; boolean exists;
int count = 0; int count = 0;
@ -180,7 +96,12 @@ public class CompetitorList {
reportContents = reportTemplate(); reportContents = reportTemplate();
return new File(path.toUri()); return new File(path.toUri());
} }
/**
* Creates a text file containing a log of the last error
* @param e the exception that has triggered
* @param path the absolute path of the file that the log should be made in
* @return The contents of the log file as a string
*/
public static String createErrorLog(Exception e, String path) { public static String createErrorLog(Exception e, String path) {
try { try {
FileWriter log = new FileWriter(path); FileWriter log = new FileWriter(path);
@ -193,16 +114,162 @@ public class CompetitorList {
} }
} }
/**
* Parses a line of text from a file to create a ValorantPlayer
* @param row the line of text to be parsed
* @return the ValorantPlayer created
*/
private ValorantPlayer parseValorantPlayer(String[] row) {
int playerNumber = Integer.parseInt(row[0]);
Name playerName = new Name(row[1]);
Rank playerLevel = Rank.valueOf(row[2]);
ValorantAgent favoriteAgent = ValorantAgent.valueOf(row[3]);
int[] scores = parseScores(row[4]);
return new ValorantPlayer(playerNumber, playerName, playerLevel, favoriteAgent, scores);
}
/**
* Parses a line of text from a file to create a R6Player
* @param row the line of text to be parsed
* @return the R6Player created
*/
private R6Player parseR6Player(String[] row) {
int playerNumber = Integer.parseInt(row[0]);
Name playerName = new Name(row[1]);
Rank playerLevel = Rank.valueOf(row[2]);
R6Attacker favoriteAttacker = R6Attacker.valueOf(row[3]);
R6Defender favoriteDefender = R6Defender.valueOf(row[4]);
int[] scores = parseScores(row[5]);
return new R6Player(playerNumber, playerName, playerLevel, favoriteAttacker, favoriteDefender, scores);
}
/**
* Parse the scores stored in a row
* @param list the list of scores to be parsed
* @return an Array of the scores
*/
private int[] parseScores(String list) {
String[] scores = list.split(",");
int[] parsedScores = new int[scores.length];
for (int i = 0; i < scores.length; i++) {
parsedScores[i] = Integer.parseInt(scores[i]);
}
return parsedScores;
}
/**
* Generate a string that represents a table of the competitors and their attributes
* @return the string
*/
private String generateTable() {
StringBuilder table = new StringBuilder("Competitor Level Scores Overall Favorite Character(s)");
Competitor best = null;
double bestScore = 0;
Rank bestRank = Rank.BRONZE;
List<Rank> ranks = Arrays.asList(Rank.values());
for (Competitor player: getCompetitors()) {
if (player.getOverallScore() > bestScore) {
best = player;
bestScore = player.getOverallScore();
bestRank = player.getPlayerLevel();
}
else if (player.getOverallScore() == bestScore) {
if (ranks.indexOf(player.getPlayerLevel()) > ranks.indexOf(bestRank)) {
best = player;
bestScore = player.getOverallScore();
bestRank = player.getPlayerLevel();
}
}
table.append("\n");
table.append(player.getShortDetails()).append(" ");
}
table.append("\n\n").append(best.getFullDetails());
return table.toString();
}
/**
* Generate the frequency of each player level across all competitors
* @return an Array of the frequencies
*/
private int[] generateLevelFreqs() {
int[] freqs = {0, 0, 0, 0};
for (Competitor player: getCompetitors()) {
switch (player.getPlayerLevel()) {
case BRONZE -> freqs[0] += 1;
case SILVER -> freqs[1] += 1;
case GOLD -> freqs[2] += 1;
case PLATINUM -> freqs[3] += 1;
default -> throw new IllegalArgumentException("Unexpected value: " + player.getPlayerLevel());
}
}
return freqs;
}
/**
* Generate the frequency of achieved scores across all competitors
* @return an Array of the frequencies
*/
private int[] generateScoreFreqs() {
int[] freqs = {0, 0, 0, 0, 0, 0};
for (Competitor player: getCompetitors()) {
for (int score: player.getScores()) {
switch (score) {
case 0 -> freqs[0] += 1;
case 1 -> freqs[1] += 1;
case 2 -> freqs[2] += 1;
case 3 -> freqs[3] += 1;
case 4 -> freqs[4] += 1;
case 5 -> freqs[5] += 1;
}
}
}
return freqs;
}
/**
* Generate the average score across all competitors
* @return the average scores
*/
private double generateAverageScore() {
double avg = 0;
int totalScores = 0;
for (Competitor player: getCompetitors()) {
for (int score: player.getScores()) {
totalScores += 1;
avg += score;
}
}
avg /= totalScores;
return avg;
}
/**
* Generate the highest score achieved across all competitors
* @return the highest score
*/
private double getHighScore() {
double hS = 0;
for (Competitor player: getCompetitors()) {
if (player.getOverallScore() > hS) {
hS = player.getOverallScore();
}
}
return hS;
}
/**
* Replace the specified target substring in the report and replace it with the replacement string
* @param target the target substring
* @param replacement the replacement string
*/
private void replaceVar(String target, String replacement) { private void replaceVar(String target, String replacement) {
reportContents = reportContents.replace(target, replacement); reportContents = reportContents.replace(target, replacement);
} }
/**
* Get the report template
* @return the report template
* @throws IOException if the file is not found
*/
private String reportTemplate() throws IOException { private String reportTemplate() throws IOException {
return Files.readString(Path.of("src/main/resources/com/r0r5chach/report.template")); return Files.readString(Path.of("src/main/resources/com/r0r5chach/report.template"));
} }
/**
* Generate the report contents
*/
private void generateReportContents() { private void generateReportContents() {
replaceVar("%TABLE%", generateTable()); replaceVar("%TABLE%", generateTable());
replaceVar( "%HIGH-SCORE%", String.valueOf(getHighScore())); replaceVar( "%HIGH-SCORE%", String.valueOf(getHighScore()));