summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacob Shimp <jrs9538@g.rit.edu>2025-11-14 20:26:21 -0500
committerJacob Shimp <jrs9538@g.rit.edu>2025-11-14 20:26:21 -0500
commit23ea4f3a14d6cf2ec76567422320d0279d1d390a (patch)
treec9382c8738b210bcf77583b8f2273558e7523753
parent5b1877bc1f4b5121ecd5befdc9ebb5e36da5c847 (diff)
downloaddesignproject-design-6-23ea4f3a14d6cf2ec76567422320d0279d1d390a.tar.gz
designproject-design-6-23ea4f3a14d6cf2ec76567422320d0279d1d390a.tar.bz2
designproject-design-6-23ea4f3a14d6cf2ec76567422320d0279d1d390a.zip
Potential implementation of LeagueStats
-rw-r--r--src/main/java/design/model/League.java17
-rw-r--r--src/main/java/design/model/Match.java11
-rw-r--r--src/main/java/design/model/ScrambleLeague.java5
-rw-r--r--src/main/java/design/model/StrokeLeague.java5
-rw-r--r--src/main/java/design/model/statistics/LeagueStats.java50
5 files changed, 86 insertions, 2 deletions
diff --git a/src/main/java/design/model/League.java b/src/main/java/design/model/League.java
index 8793c86..b76cc33 100644
--- a/src/main/java/design/model/League.java
+++ b/src/main/java/design/model/League.java
@@ -7,6 +7,7 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
+import java.util.Map;
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
@@ -25,6 +26,7 @@ public abstract class League {
private final Date endDate;
private final Golfer owner;
private final List<Match> schedule;
+ private final List<Match> completedMatches;
private boolean completed;
@JsonCreator
@@ -37,6 +39,13 @@ public abstract class League {
this.owner = owner;
this.schedule = schedule != null ? schedule : new ArrayList<>();
this.completed = false;
+
+ this.completedMatches = new ArrayList<>();
+ for(Match m : this.schedule){
+ if(m.checkCompletion()){
+ completedMatches.add(m);
+ }
+ }
}
public League(String name, Date registrationDate, Date startDate, Date endDate, Golfer owner) {
@@ -48,6 +57,8 @@ public abstract class League {
this.owner = owner;
this.schedule = new ArrayList<>();
this.completed = false;
+
+ this.completedMatches = new ArrayList<>();
}
public int getId() {
@@ -82,6 +93,10 @@ public abstract class League {
return completed;
}
+ public List<Match> getCompletedMatches() {
+ return completedMatches;
+ }
+
public void addMatchToSchedule(Match match) {
if(match.getDateScheduled().after(endDate)){
throw new IllegalArgumentException("Cannot create match after league has ended");
@@ -112,4 +127,6 @@ public abstract class League {
public abstract void recordPlay(Golfer player, Match match, Round round);
public abstract void finalizeLeague();
+
+ public abstract Map<?, Integer> getResults();
}
diff --git a/src/main/java/design/model/Match.java b/src/main/java/design/model/Match.java
index 4f01c98..8126e7c 100644
--- a/src/main/java/design/model/Match.java
+++ b/src/main/java/design/model/Match.java
@@ -11,22 +11,25 @@ public class Match {
private final Course course;
private final Date dateScheduled;
private final LocalDateTime start;
+ private final LocalDateTime end;
private final int holeCount;
private final List<Round> rounds;
@JsonCreator
- private Match(Course course, Date dateScheduled, LocalDateTime start, int holeCount, List<Round> rounds) {
+ private Match(Course course, Date dateScheduled, LocalDateTime start, LocalDateTime end, int holeCount, List<Round> rounds) {
this.course = course;
this.dateScheduled = dateScheduled;
this.start = start;
+ this.end = end;
this.holeCount = holeCount;
this.rounds = rounds;
}
- public Match(Course course, Date dateScheduled, LocalDateTime start, int holeCount) {
+ public Match(Course course, Date dateScheduled, LocalDateTime start, LocalDateTime end, int holeCount) {
this.course = course;
this.dateScheduled = dateScheduled;
this.start = start;
+ this.end = end;
this.holeCount = holeCount;
this.rounds = new ArrayList<>();
}
@@ -54,4 +57,8 @@ public class Match {
public Round[] getRounds() {
return rounds.toArray(Round[]::new);
}
+
+ public boolean checkCompletion() {
+ return LocalDateTime.now().isAfter(end);
+ }
}
diff --git a/src/main/java/design/model/ScrambleLeague.java b/src/main/java/design/model/ScrambleLeague.java
index 1fb8f1d..964294f 100644
--- a/src/main/java/design/model/ScrambleLeague.java
+++ b/src/main/java/design/model/ScrambleLeague.java
@@ -81,4 +81,9 @@ public class ScrambleLeague extends League {
public Map<Team, Integer> getTotalTeamScores(){
return Collections.unmodifiableMap(totalTeamScores);
}
+
+ @Override
+ public Map<Team, Integer> getResults() {
+ return getTotalTeamScores();
+ }
}
diff --git a/src/main/java/design/model/StrokeLeague.java b/src/main/java/design/model/StrokeLeague.java
index d051fd0..8a61659 100644
--- a/src/main/java/design/model/StrokeLeague.java
+++ b/src/main/java/design/model/StrokeLeague.java
@@ -65,4 +65,9 @@ public class StrokeLeague extends League {
public Map<Golfer, Integer> getTotalStrokes(){
return Collections.unmodifiableMap(totalStrokes);
}
+
+ @Override
+ public Map<Golfer, Integer> getResults() {
+ return getTotalStrokes();
+ }
}
diff --git a/src/main/java/design/model/statistics/LeagueStats.java b/src/main/java/design/model/statistics/LeagueStats.java
new file mode 100644
index 0000000..a4e6950
--- /dev/null
+++ b/src/main/java/design/model/statistics/LeagueStats.java
@@ -0,0 +1,50 @@
+package design.model.statistics;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+import design.model.League;
+import design.model.Match;
+import design.model.Round;
+
+public class LeagueStats implements Statistics{
+ private final League league;
+
+ public LeagueStats(League league) {
+ this.league = league;
+ }
+
+ public List<Match> getMatchesPlayed() {
+ return league.getCompletedMatches();
+ }
+
+ public Map<?, Integer> getScores() {
+ return league.getResults();
+ }
+
+ public List<? extends Map.Entry<?, Integer>> getStandings(){
+ return league.getResults().entrySet().stream().sorted(Map.Entry.comparingByValue()).toList();
+ }
+
+ public List<?> getWinners(){
+ List<? extends Map.Entry<?, Integer>> standings = getStandings();
+ int bestScore = standings.get(0).getValue();
+ return standings.stream().filter(entry -> entry.getValue() == bestScore).map(Map.Entry::getKey).toList();
+ }
+
+ @Override
+ public Round[] getRounds(){
+ return league.getCompletedMatches().stream().flatMap(match -> Arrays.stream(match.getRounds())).toArray(Round[]::new);
+ }
+
+ @Override
+ public int get_score(){
+ return Arrays.stream(getRounds()).mapToInt(Round::getTotalSwings).sum();
+ }
+
+ @Override
+ public double get_distance(){
+ return Arrays.stream(getRounds()).mapToDouble(Round::getTotalDistance).sum();
+ }
+}