summaryrefslogtreecommitdiff
path: root/src/main/java/design/model
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/main/java/design/model/Hole.java9
-rw-r--r--src/main/java/design/model/Round.java6
-rw-r--r--src/main/java/design/model/statistics/CourseStats.java22
-rw-r--r--src/main/java/design/model/statistics/HoleStats.java22
-rw-r--r--src/main/java/design/model/statistics/LifetimeStats.java31
-rw-r--r--src/main/java/design/model/statistics/RoundStats.java21
-rw-r--r--src/main/java/design/model/statistics/Statistics.java7
-rw-r--r--src/main/java/design/model/statistics/StatisticsDecorator.java22
-rw-r--r--src/main/java/design/model/statistics/YearlyStats.java21
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);
+ }
+}