diff options
| author | JakeShimp <131617763+JakeShimp@users.noreply.github.com> | 2025-10-05 14:36:09 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-10-05 14:36:09 -0400 |
| commit | 5b561d4743556a60cb4dc198489b48f8844a5c28 (patch) | |
| tree | c2a4ddcbb07d4b2ba3dae3dc6ee42be969372a7b /src/main/java/design | |
| parent | 7ce2647830e34c61a479eebc69b679f7d20df94a (diff) | |
| parent | ea6a4afbe65ff6e26b568345efbb564a0a86abc9 (diff) | |
| download | designproject-design-6-5b561d4743556a60cb4dc198489b48f8844a5c28.tar.gz designproject-design-6-5b561d4743556a60cb4dc198489b48f8844a5c28.tar.bz2 designproject-design-6-5b561d4743556a60cb4dc198489b48f8844a5c28.zip | |
Merge pull request #4 from RIT-SWEN-262/statistic-dev
Statistic dev
Diffstat (limited to '')
9 files changed, 161 insertions, 0 deletions
diff --git a/src/main/java/design/model/Hole.java b/src/main/java/design/model/Hole.java index 23dc783..f79cc3d 100644 --- a/src/main/java/design/model/Hole.java +++ b/src/main/java/design/model/Hole.java @@ -18,5 +18,14 @@ public class Hole { return par; } + @Override + public boolean equals(Object obj){ + if(!(obj instanceof Hole)){ + return false; + } + Hole object = (Hole)obj; + return (object.getNumber() == this.getNumber() && object.getPar() == this.getPar()); + } + // TODO: Maybe add a get yardage method } diff --git a/src/main/java/design/model/Round.java b/src/main/java/design/model/Round.java index bc4914e..e4442d3 100644 --- a/src/main/java/design/model/Round.java +++ b/src/main/java/design/model/Round.java @@ -40,6 +40,12 @@ public class Round { .reduce(0, Integer::sum); } + public double getTotalDistance() { + return plays.stream() + .mapToDouble(design.model.Play::getDistance) + .sum(); + } + public Course getCourse() { return course; } diff --git a/src/main/java/design/model/statistics/CourseStats.java b/src/main/java/design/model/statistics/CourseStats.java new file mode 100644 index 0000000..98d9529 --- /dev/null +++ b/src/main/java/design/model/statistics/CourseStats.java @@ -0,0 +1,22 @@ +package design.model.statistics; + +import java.util.Arrays; + +import design.model.Course; +import design.model.Round; + +public class CourseStats extends StatisticsDecorator{ + private Course course; + + public CourseStats(Statistics wrapped_statistics, Course course){ + super(wrapped_statistics); + this.course = course; + } + + @Override + public Round[] getRounds(){ + return Arrays.stream(super.getRounds()) + .filter(rounds -> (rounds.getCourse().getName().equals(course.getName()) && rounds.getCourse().getLocation().equals(course.getLocation()))) + .toArray(Round[]::new); + } +} diff --git a/src/main/java/design/model/statistics/HoleStats.java b/src/main/java/design/model/statistics/HoleStats.java new file mode 100644 index 0000000..2c023b4 --- /dev/null +++ b/src/main/java/design/model/statistics/HoleStats.java @@ -0,0 +1,22 @@ +package design.model.statistics; + +import java.util.Arrays; + +import design.model.Hole; +import design.model.Round; + +public class HoleStats extends StatisticsDecorator{ + private Hole target_hole; + + public HoleStats(Statistics wrapped_statistics, Hole target_hole){ + super(wrapped_statistics); + this.target_hole = target_hole; + } + + @Override + public Round[] getRounds(){ + return Arrays.stream(super.getRounds()) + .filter(round -> round.getCourse().getHoles().stream().anyMatch(hole -> hole.equals(target_hole))) + .toArray(Round[]::new); + } +} diff --git a/src/main/java/design/model/statistics/LifetimeStats.java b/src/main/java/design/model/statistics/LifetimeStats.java new file mode 100644 index 0000000..aee4e66 --- /dev/null +++ b/src/main/java/design/model/statistics/LifetimeStats.java @@ -0,0 +1,31 @@ +package design.model.statistics; + +import design.model.Golfer; +import design.model.Round; + +public class LifetimeStats implements Statistics{ + private final Golfer golfer; + public LifetimeStats(Golfer golfer){ + this.golfer = golfer; + } + @Override + public Round[] getRounds(){ + return golfer.getRounds(); + } + @Override + public int get_score(){ + int score = 0; + for(Round round : getRounds()){ + score += round.getTotalSwings(); + } + return score; + } + @Override + public double get_distance(){ + double distance = 0; + for(Round round : getRounds()){ + distance += round.getTotalDistance(); + } + return distance; + } +} diff --git a/src/main/java/design/model/statistics/RoundStats.java b/src/main/java/design/model/statistics/RoundStats.java new file mode 100644 index 0000000..598ca59 --- /dev/null +++ b/src/main/java/design/model/statistics/RoundStats.java @@ -0,0 +1,21 @@ +package design.model.statistics; + +import java.util.Arrays; + +import design.model.Round; + +public class RoundStats extends StatisticsDecorator{ + private Round target_round; + + public RoundStats(Statistics wrapped_statistics, Round target_round){ + super(wrapped_statistics); + this.target_round = target_round; + } + + @Override + public Round[] getRounds(){ + return Arrays.stream(super.getRounds()) + .filter(round -> round == target_round) + .toArray(Round[]::new); + } +} diff --git a/src/main/java/design/model/statistics/Statistics.java b/src/main/java/design/model/statistics/Statistics.java new file mode 100644 index 0000000..53764a1 --- /dev/null +++ b/src/main/java/design/model/statistics/Statistics.java @@ -0,0 +1,7 @@ +package design.model.statistics; + +public interface Statistics { + public int get_score(); + public double get_distance(); + design.model.Round[] getRounds(); +} diff --git a/src/main/java/design/model/statistics/StatisticsDecorator.java b/src/main/java/design/model/statistics/StatisticsDecorator.java new file mode 100644 index 0000000..91ca452 --- /dev/null +++ b/src/main/java/design/model/statistics/StatisticsDecorator.java @@ -0,0 +1,22 @@ +package design.model.statistics; + +import design.model.Round; + +public abstract class StatisticsDecorator implements Statistics{ + protected Statistics wrapped_statistics; + public StatisticsDecorator(Statistics wrapped_statistics){ + this.wrapped_statistics = wrapped_statistics; + } + @Override + public Round[] getRounds() { + return wrapped_statistics.getRounds(); + } + @Override + public int get_score(){ + return wrapped_statistics.get_score(); + } + @Override + public double get_distance(){ + return wrapped_statistics.get_distance(); + } +} diff --git a/src/main/java/design/model/statistics/YearlyStats.java b/src/main/java/design/model/statistics/YearlyStats.java new file mode 100644 index 0000000..4c5d078 --- /dev/null +++ b/src/main/java/design/model/statistics/YearlyStats.java @@ -0,0 +1,21 @@ +package design.model.statistics; + +import java.util.Arrays; + +import design.model.Round; + +public class YearlyStats extends StatisticsDecorator{ + private int year; + + public YearlyStats(Statistics wrapped_statistics, int year){ + super(wrapped_statistics); + this.year = year; + } + + @Override + public Round[] getRounds(){ + return Arrays.stream(super.getRounds()) + .filter(round -> round.getDateTime().getYear() == year) + .toArray(Round[]::new); + } +} |
