From 106c77d0621e486d5144fe3f57db684276845769 Mon Sep 17 00:00:00 2001 From: Jacob Shimp Date: Thu, 2 Oct 2025 08:31:26 -0400 Subject: added all files, no implementation yet --- src/main/java/design/model/statistics/CourseStats.java | 5 +++++ src/main/java/design/model/statistics/HoleStats.java | 5 +++++ src/main/java/design/model/statistics/LifetimeStats.java | 5 +++++ src/main/java/design/model/statistics/RoundStats.java | 5 +++++ src/main/java/design/model/statistics/Statistics.java | 6 ++++++ src/main/java/design/model/statistics/StatisticsDecorator.java | 5 +++++ src/main/java/design/model/statistics/YearlyStats.java | 5 +++++ 7 files changed, 36 insertions(+) create mode 100644 src/main/java/design/model/statistics/CourseStats.java create mode 100644 src/main/java/design/model/statistics/HoleStats.java create mode 100644 src/main/java/design/model/statistics/LifetimeStats.java create mode 100644 src/main/java/design/model/statistics/RoundStats.java create mode 100644 src/main/java/design/model/statistics/Statistics.java create mode 100644 src/main/java/design/model/statistics/StatisticsDecorator.java create mode 100644 src/main/java/design/model/statistics/YearlyStats.java (limited to 'src/main/java/design/model/statistics') 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..9336525 --- /dev/null +++ b/src/main/java/design/model/statistics/CourseStats.java @@ -0,0 +1,5 @@ +package design.model.statistics; + +public class CourseStats { + +} 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..de3a5ff --- /dev/null +++ b/src/main/java/design/model/statistics/HoleStats.java @@ -0,0 +1,5 @@ +package design.model.statistics; + +public class HoleStats { + +} 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..bb92a14 --- /dev/null +++ b/src/main/java/design/model/statistics/LifetimeStats.java @@ -0,0 +1,5 @@ +package design.model.statistics; + +public class LifetimeStats { + +} 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..2683cb9 --- /dev/null +++ b/src/main/java/design/model/statistics/RoundStats.java @@ -0,0 +1,5 @@ +package design.model.statistics; + +public class RoundStats { + +} 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..9b77f22 --- /dev/null +++ b/src/main/java/design/model/statistics/Statistics.java @@ -0,0 +1,6 @@ +package design.model.statistics; + +public interface Statistics { + public int get_score(); + public double get_distance(); +} 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..e7a0dfc --- /dev/null +++ b/src/main/java/design/model/statistics/StatisticsDecorator.java @@ -0,0 +1,5 @@ +package design.model.statistics; + +public class StatisticsDecorator { + +} 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..b523000 --- /dev/null +++ b/src/main/java/design/model/statistics/YearlyStats.java @@ -0,0 +1,5 @@ +package design.model.statistics; + +public class YearlyStats { + +} -- cgit v1.2.3 From 4288673bdc1e3324331ae0ff3cfa5519807f61bc Mon Sep 17 00:00:00 2001 From: Jacob Shimp Date: Thu, 2 Oct 2025 08:40:05 -0400 Subject: got the two 'implements' classes done --- src/main/java/design/model/statistics/BaseStatistics.java | 12 ++++++++++++ .../java/design/model/statistics/StatisticsDecorator.java | 12 ++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 src/main/java/design/model/statistics/BaseStatistics.java (limited to 'src/main/java/design/model/statistics') diff --git a/src/main/java/design/model/statistics/BaseStatistics.java b/src/main/java/design/model/statistics/BaseStatistics.java new file mode 100644 index 0000000..f5b6c21 --- /dev/null +++ b/src/main/java/design/model/statistics/BaseStatistics.java @@ -0,0 +1,12 @@ +package design.model.statistics; + +public class BaseStatistics implements Statistics{ + @Override + public int get_score(){ + return 0; + } + @Override + public double get_distance(){ + return 0.0; + } +} diff --git a/src/main/java/design/model/statistics/StatisticsDecorator.java b/src/main/java/design/model/statistics/StatisticsDecorator.java index e7a0dfc..f6aa43c 100644 --- a/src/main/java/design/model/statistics/StatisticsDecorator.java +++ b/src/main/java/design/model/statistics/StatisticsDecorator.java @@ -1,5 +1,13 @@ package design.model.statistics; -public class StatisticsDecorator { - +public class StatisticsDecorator implements Statistics{ + protected Statistics wrapped_statistics; + @Override + public int get_score(){ + return wrapped_statistics.get_score(); + } + @Override + public double get_distance(){ + return wrapped_statistics.get_distance(); + } } -- cgit v1.2.3 From ec252eb5546076fa457d389d42821ae62b0bc198 Mon Sep 17 00:00:00 2001 From: Jacob Shimp Date: Thu, 2 Oct 2025 08:50:08 -0400 Subject: added base implementations for all concrete decorators --- .../java/design/model/statistics/CourseStats.java | 21 +++++++++++++++++++-- .../java/design/model/statistics/HoleStats.java | 21 +++++++++++++++++++-- .../java/design/model/statistics/LifetimeStats.java | 15 +++++++++++++-- .../java/design/model/statistics/RoundStats.java | 21 +++++++++++++++++++-- .../model/statistics/StatisticsDecorator.java | 3 +++ .../java/design/model/statistics/YearlyStats.java | 19 +++++++++++++++++-- 6 files changed, 90 insertions(+), 10 deletions(-) (limited to 'src/main/java/design/model/statistics') diff --git a/src/main/java/design/model/statistics/CourseStats.java b/src/main/java/design/model/statistics/CourseStats.java index 9336525..47cc2c9 100644 --- a/src/main/java/design/model/statistics/CourseStats.java +++ b/src/main/java/design/model/statistics/CourseStats.java @@ -1,5 +1,22 @@ package design.model.statistics; -public class CourseStats { - +import design.model.Course; + +public class CourseStats extends StatisticsDecorator{ + private Course course; + + public CourseStats(Statistics wrapped_statistics, Course course){ + super(wrapped_statistics); + this.course = course; + } + + @Override + public int get_score(){ + return super.get_score(); + } + + @Override + public double get_distance(){ + return super.get_distance(); + } } diff --git a/src/main/java/design/model/statistics/HoleStats.java b/src/main/java/design/model/statistics/HoleStats.java index de3a5ff..64fa96c 100644 --- a/src/main/java/design/model/statistics/HoleStats.java +++ b/src/main/java/design/model/statistics/HoleStats.java @@ -1,5 +1,22 @@ package design.model.statistics; -public class HoleStats { - +import design.model.Hole; + +public class HoleStats extends StatisticsDecorator{ + private Hole hole; + + public HoleStats(Statistics wrapped_statistics, Hole hole){ + super(wrapped_statistics); + this.hole = hole; + } + + @Override + public int get_score(){ + return super.get_score(); + } + + @Override + public double get_distance(){ + return super.get_distance(); + } } diff --git a/src/main/java/design/model/statistics/LifetimeStats.java b/src/main/java/design/model/statistics/LifetimeStats.java index bb92a14..9c1236c 100644 --- a/src/main/java/design/model/statistics/LifetimeStats.java +++ b/src/main/java/design/model/statistics/LifetimeStats.java @@ -1,5 +1,16 @@ package design.model.statistics; -public class LifetimeStats { - +public class LifetimeStats extends StatisticsDecorator{ + public LifetimeStats(Statistics wrapped_statistics){ + super(wrapped_statistics); + } + @Override + public int get_score(){ + return super.get_score(); + } + + @Override + public double get_distance(){ + return super.get_distance(); + } } diff --git a/src/main/java/design/model/statistics/RoundStats.java b/src/main/java/design/model/statistics/RoundStats.java index 2683cb9..f65a249 100644 --- a/src/main/java/design/model/statistics/RoundStats.java +++ b/src/main/java/design/model/statistics/RoundStats.java @@ -1,5 +1,22 @@ package design.model.statistics; -public class RoundStats { - +import design.model.Round; + +public class RoundStats extends StatisticsDecorator{ + private Round round; + + public RoundStats(Statistics wrapped_statistics, Round round){ + super(wrapped_statistics); + this.round = round; + } + + @Override + public int get_score(){ + return super.get_score(); + } + + @Override + public double get_distance(){ + return super.get_distance(); + } } diff --git a/src/main/java/design/model/statistics/StatisticsDecorator.java b/src/main/java/design/model/statistics/StatisticsDecorator.java index f6aa43c..b0ba323 100644 --- a/src/main/java/design/model/statistics/StatisticsDecorator.java +++ b/src/main/java/design/model/statistics/StatisticsDecorator.java @@ -2,6 +2,9 @@ package design.model.statistics; public class StatisticsDecorator implements Statistics{ protected Statistics wrapped_statistics; + public StatisticsDecorator(Statistics wrapped_statistics){ + this.wrapped_statistics = wrapped_statistics; + } @Override public int get_score(){ return wrapped_statistics.get_score(); diff --git a/src/main/java/design/model/statistics/YearlyStats.java b/src/main/java/design/model/statistics/YearlyStats.java index b523000..026e2c5 100644 --- a/src/main/java/design/model/statistics/YearlyStats.java +++ b/src/main/java/design/model/statistics/YearlyStats.java @@ -1,5 +1,20 @@ package design.model.statistics; -public class YearlyStats { - +public class YearlyStats extends StatisticsDecorator{ + private int year; + + public YearlyStats(Statistics wrapped_statistics, int year){ + super(wrapped_statistics); + this.year = year; + } + + @Override + public int get_score(){ + return super.get_score(); + } + + @Override + public double get_distance(){ + return super.get_distance(); + } } -- cgit v1.2.3 From 26a7076e93c4cd49fd6c9da7a2c9b217771012e8 Mon Sep 17 00:00:00 2001 From: Jacob Shimp Date: Thu, 2 Oct 2025 11:48:18 -0400 Subject: implemented lifetime statistics --- .../design/model/statistics/LifetimeStats.java | 22 +++++++++++++++++++--- .../model/statistics/StatisticsDecorator.java | 2 +- 2 files changed, 20 insertions(+), 4 deletions(-) (limited to 'src/main/java/design/model/statistics') diff --git a/src/main/java/design/model/statistics/LifetimeStats.java b/src/main/java/design/model/statistics/LifetimeStats.java index 9c1236c..9cefd7a 100644 --- a/src/main/java/design/model/statistics/LifetimeStats.java +++ b/src/main/java/design/model/statistics/LifetimeStats.java @@ -1,16 +1,32 @@ package design.model.statistics; +import design.model.Golfer; +import design.model.Play; +import design.model.Round; + public class LifetimeStats extends StatisticsDecorator{ - public LifetimeStats(Statistics wrapped_statistics){ + Golfer golfer; + public LifetimeStats(Statistics wrapped_statistics, Golfer golfer){ super(wrapped_statistics); + this.golfer = golfer; } @Override public int get_score(){ - return super.get_score(); + int baseStats = super.get_score(); + for(Round round : golfer.getRounds()){ + baseStats += round.getTotalSwings(); + } + return baseStats; } @Override public double get_distance(){ - return super.get_distance(); + double baseStats = super.get_distance(); + for(Round round : golfer.getRounds()){ + for(Play play : round.getPlays()){ + baseStats += play.getDistance(); + } + } + return baseStats; } } diff --git a/src/main/java/design/model/statistics/StatisticsDecorator.java b/src/main/java/design/model/statistics/StatisticsDecorator.java index b0ba323..96a2aaf 100644 --- a/src/main/java/design/model/statistics/StatisticsDecorator.java +++ b/src/main/java/design/model/statistics/StatisticsDecorator.java @@ -1,6 +1,6 @@ package design.model.statistics; -public class StatisticsDecorator implements Statistics{ +public abstract class StatisticsDecorator implements Statistics{ protected Statistics wrapped_statistics; public StatisticsDecorator(Statistics wrapped_statistics){ this.wrapped_statistics = wrapped_statistics; -- cgit v1.2.3 From 19101e44d4e658650b535eb14692446b098215e3 Mon Sep 17 00:00:00 2001 From: Jacob Shimp Date: Thu, 2 Oct 2025 12:08:59 -0400 Subject: adited lifetime stats --- src/main/java/design/model/statistics/LifetimeStats.java | 2 +- src/main/java/design/model/statistics/YearlyStats.java | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) (limited to 'src/main/java/design/model/statistics') diff --git a/src/main/java/design/model/statistics/LifetimeStats.java b/src/main/java/design/model/statistics/LifetimeStats.java index 9cefd7a..6e1cc97 100644 --- a/src/main/java/design/model/statistics/LifetimeStats.java +++ b/src/main/java/design/model/statistics/LifetimeStats.java @@ -5,7 +5,7 @@ import design.model.Play; import design.model.Round; public class LifetimeStats extends StatisticsDecorator{ - Golfer golfer; + private Golfer golfer; public LifetimeStats(Statistics wrapped_statistics, Golfer golfer){ super(wrapped_statistics); this.golfer = golfer; diff --git a/src/main/java/design/model/statistics/YearlyStats.java b/src/main/java/design/model/statistics/YearlyStats.java index 026e2c5..856dda9 100644 --- a/src/main/java/design/model/statistics/YearlyStats.java +++ b/src/main/java/design/model/statistics/YearlyStats.java @@ -1,20 +1,26 @@ package design.model.statistics; +import design.model.Golfer; + public class YearlyStats extends StatisticsDecorator{ private int year; + private Golfer golfer; - public YearlyStats(Statistics wrapped_statistics, int year){ + public YearlyStats(Statistics wrapped_statistics, int year, Golfer golfer){ super(wrapped_statistics); this.year = year; + this.golfer = golfer; } @Override public int get_score(){ - return super.get_score(); + int baseStats = super.get_score(); + return baseStats; } @Override public double get_distance(){ - return super.get_distance(); + double baseStats = super.get_distance(); + return baseStats; } } -- cgit v1.2.3 From b4919667c3455d8b517df6a72b7d37e0734d9155 Mon Sep 17 00:00:00 2001 From: Jacob Shimp Date: Fri, 3 Oct 2025 20:31:51 -0400 Subject: Implemented all decorators, replaced BaseStatistics with LifetimeStatistics since they would have been redundant --- .../design/model/statistics/BaseStatistics.java | 12 --------- .../java/design/model/statistics/CourseStats.java | 14 +++++----- .../java/design/model/statistics/HoleStats.java | 20 +++++++------- .../design/model/statistics/LifetimeStats.java | 31 +++++++++++----------- .../java/design/model/statistics/RoundStats.java | 19 +++++++------ .../java/design/model/statistics/Statistics.java | 1 + .../model/statistics/StatisticsDecorator.java | 6 +++++ .../java/design/model/statistics/YearlyStats.java | 21 ++++++--------- 8 files changed, 56 insertions(+), 68 deletions(-) delete mode 100644 src/main/java/design/model/statistics/BaseStatistics.java (limited to 'src/main/java/design/model/statistics') diff --git a/src/main/java/design/model/statistics/BaseStatistics.java b/src/main/java/design/model/statistics/BaseStatistics.java deleted file mode 100644 index f5b6c21..0000000 --- a/src/main/java/design/model/statistics/BaseStatistics.java +++ /dev/null @@ -1,12 +0,0 @@ -package design.model.statistics; - -public class BaseStatistics implements Statistics{ - @Override - public int get_score(){ - return 0; - } - @Override - public double get_distance(){ - return 0.0; - } -} diff --git a/src/main/java/design/model/statistics/CourseStats.java b/src/main/java/design/model/statistics/CourseStats.java index 47cc2c9..98d9529 100644 --- a/src/main/java/design/model/statistics/CourseStats.java +++ b/src/main/java/design/model/statistics/CourseStats.java @@ -1,6 +1,9 @@ package design.model.statistics; +import java.util.Arrays; + import design.model.Course; +import design.model.Round; public class CourseStats extends StatisticsDecorator{ private Course course; @@ -11,12 +14,9 @@ public class CourseStats extends StatisticsDecorator{ } @Override - public int get_score(){ - return super.get_score(); - } - - @Override - public double get_distance(){ - return super.get_distance(); + 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 index 64fa96c..2c023b4 100644 --- a/src/main/java/design/model/statistics/HoleStats.java +++ b/src/main/java/design/model/statistics/HoleStats.java @@ -1,22 +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 hole; + private Hole target_hole; - public HoleStats(Statistics wrapped_statistics, Hole hole){ + public HoleStats(Statistics wrapped_statistics, Hole target_hole){ super(wrapped_statistics); - this.hole = hole; - } - - @Override - public int get_score(){ - return super.get_score(); + this.target_hole = target_hole; } @Override - public double get_distance(){ - return super.get_distance(); + 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 index 6e1cc97..aee4e66 100644 --- a/src/main/java/design/model/statistics/LifetimeStats.java +++ b/src/main/java/design/model/statistics/LifetimeStats.java @@ -1,32 +1,31 @@ package design.model.statistics; import design.model.Golfer; -import design.model.Play; import design.model.Round; -public class LifetimeStats extends StatisticsDecorator{ - private Golfer golfer; - public LifetimeStats(Statistics wrapped_statistics, Golfer golfer){ - super(wrapped_statistics); +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 baseStats = super.get_score(); - for(Round round : golfer.getRounds()){ - baseStats += round.getTotalSwings(); + int score = 0; + for(Round round : getRounds()){ + score += round.getTotalSwings(); } - return baseStats; + return score; } - @Override public double get_distance(){ - double baseStats = super.get_distance(); - for(Round round : golfer.getRounds()){ - for(Play play : round.getPlays()){ - baseStats += play.getDistance(); - } + double distance = 0; + for(Round round : getRounds()){ + distance += round.getTotalDistance(); } - return baseStats; + return distance; } } diff --git a/src/main/java/design/model/statistics/RoundStats.java b/src/main/java/design/model/statistics/RoundStats.java index f65a249..598ca59 100644 --- a/src/main/java/design/model/statistics/RoundStats.java +++ b/src/main/java/design/model/statistics/RoundStats.java @@ -1,22 +1,21 @@ package design.model.statistics; +import java.util.Arrays; + import design.model.Round; public class RoundStats extends StatisticsDecorator{ - private Round round; + private Round target_round; - public RoundStats(Statistics wrapped_statistics, Round round){ + public RoundStats(Statistics wrapped_statistics, Round target_round){ super(wrapped_statistics); - this.round = round; - } - - @Override - public int get_score(){ - return super.get_score(); + this.target_round = target_round; } @Override - public double get_distance(){ - return super.get_distance(); + 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 index 9b77f22..53764a1 100644 --- a/src/main/java/design/model/statistics/Statistics.java +++ b/src/main/java/design/model/statistics/Statistics.java @@ -3,4 +3,5 @@ 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 index 96a2aaf..91ca452 100644 --- a/src/main/java/design/model/statistics/StatisticsDecorator.java +++ b/src/main/java/design/model/statistics/StatisticsDecorator.java @@ -1,11 +1,17 @@ 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(); } diff --git a/src/main/java/design/model/statistics/YearlyStats.java b/src/main/java/design/model/statistics/YearlyStats.java index 856dda9..4c5d078 100644 --- a/src/main/java/design/model/statistics/YearlyStats.java +++ b/src/main/java/design/model/statistics/YearlyStats.java @@ -1,26 +1,21 @@ package design.model.statistics; -import design.model.Golfer; +import java.util.Arrays; + +import design.model.Round; public class YearlyStats extends StatisticsDecorator{ private int year; - private Golfer golfer; - public YearlyStats(Statistics wrapped_statistics, int year, Golfer golfer){ + public YearlyStats(Statistics wrapped_statistics, int year){ super(wrapped_statistics); this.year = year; - this.golfer = golfer; - } - - @Override - public int get_score(){ - int baseStats = super.get_score(); - return baseStats; } @Override - public double get_distance(){ - double baseStats = super.get_distance(); - return baseStats; + public Round[] getRounds(){ + return Arrays.stream(super.getRounds()) + .filter(round -> round.getDateTime().getYear() == year) + .toArray(Round[]::new); } } -- cgit v1.2.3