summaryrefslogtreecommitdiff
path: root/src/main/java/design/model/League.java
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/main/java/design/model/League.java90
1 files changed, 90 insertions, 0 deletions
diff --git a/src/main/java/design/model/League.java b/src/main/java/design/model/League.java
new file mode 100644
index 0000000..881e25f
--- /dev/null
+++ b/src/main/java/design/model/League.java
@@ -0,0 +1,90 @@
+package design.model;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.PROPERTY,
+ property = "type"
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = ScrambleLeague.class, name = "scramble"),
+ @JsonSubTypes.Type(value = StrokeLeague.class, name = "stroke")
+})
+public abstract class League {
+ private int id;
+ private final String name;
+ private final Date registrationDate;
+ private final Date startDate;
+ private final Date endDate;
+ private final Golfer owner;
+ private final List<Match> schedule;
+
+ @JsonCreator
+ protected League(int id, String name, Date registrationDate, Date startDate, Date endDate, Golfer owner, List<Match> schedule) {
+ this.id = id;
+ this.name = name;
+ this.registrationDate = registrationDate;
+ this.startDate = startDate;
+ this.endDate = endDate;
+ this.owner = owner;
+ this.schedule = schedule != null ? schedule : new ArrayList<>();
+ }
+
+ public League(String name, Date registrationDate, Date startDate, Date endDate, Golfer owner) {
+ this.id = -1;
+ this.name = name;
+ this.registrationDate = registrationDate;
+ this.startDate = startDate;
+ this.endDate = endDate;
+ this.owner = owner;
+ this.schedule = new ArrayList<>();
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public Date getRegistrationDate() {
+ return registrationDate;
+ }
+
+ public Date getStartDate() {
+ return startDate;
+ }
+
+ public Date getEndDate() {
+ return endDate;
+ }
+
+ public Golfer getOwner() {
+ return owner;
+ }
+
+ public Match[] getSchedule() {
+ return schedule.toArray(Match[]::new);
+ }
+
+ public void addMatchToSchedule(Match match) {
+ Date date = match.getDateScheduled();
+ if(date.after(endDate)){
+ throw new IllegalArgumentException("Cannot create match after league has ended");
+ }
+ schedule.add(match);
+ }
+
+ public void setId(int id) {
+ assert this.id == -1;
+ this.id = id;
+ }
+}