diff options
| author | Jacob Shimp <jrs9538@g.rit.edu> | 2025-11-14 20:26:21 -0500 |
|---|---|---|
| committer | Jacob Shimp <jrs9538@g.rit.edu> | 2025-11-14 20:26:21 -0500 |
| commit | 23ea4f3a14d6cf2ec76567422320d0279d1d390a (patch) | |
| tree | c9382c8738b210bcf77583b8f2273558e7523753 /src/main | |
| parent | 5b1877bc1f4b5121ecd5befdc9ebb5e36da5c847 (diff) | |
| download | designproject-design-6-23ea4f3a14d6cf2ec76567422320d0279d1d390a.tar.gz designproject-design-6-23ea4f3a14d6cf2ec76567422320d0279d1d390a.tar.bz2 designproject-design-6-23ea4f3a14d6cf2ec76567422320d0279d1d390a.zip | |
Potential implementation of LeagueStats
Diffstat (limited to 'src/main')
| -rw-r--r-- | src/main/java/design/model/League.java | 17 | ||||
| -rw-r--r-- | src/main/java/design/model/Match.java | 11 | ||||
| -rw-r--r-- | src/main/java/design/model/ScrambleLeague.java | 5 | ||||
| -rw-r--r-- | src/main/java/design/model/StrokeLeague.java | 5 | ||||
| -rw-r--r-- | src/main/java/design/model/statistics/LeagueStats.java | 50 |
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(); + } +} |
