diff options
Diffstat (limited to 'src/main/java/design/model/statistics')
7 files changed, 146 insertions, 0 deletions
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); + } +} |
