summaryrefslogtreecommitdiff
path: root/src/main/java/design
diff options
context:
space:
mode:
authorsowgro <tpoke.ferrari@gmail.com>2025-11-09 00:06:03 -0500
committersowgro <tpoke.ferrari@gmail.com>2025-11-09 00:06:03 -0500
commite56ad78ddba089b5bb93af96e33ee7c42b7d0b51 (patch)
tree2fa7e80f18ad516e46a8b2c783c29d61777337ad /src/main/java/design
parentac4a71e3b43370fe45e39ac4e735b88f2e284a14 (diff)
downloaddesignproject-design-6-e56ad78ddba089b5bb93af96e33ee7c42b7d0b51.tar.gz
designproject-design-6-e56ad78ddba089b5bb93af96e33ee7c42b7d0b51.tar.bz2
designproject-design-6-e56ad78ddba089b5bb93af96e33ee7c42b7d0b51.zip
create most of the model and league DAOs
Diffstat (limited to '')
-rw-r--r--src/main/java/design/model/Invite.java25
-rw-r--r--src/main/java/design/model/League.java45
-rw-r--r--src/main/java/design/model/Match.java57
-rw-r--r--src/main/java/design/model/ScrambleLeague.java34
-rw-r--r--src/main/java/design/model/StrokeLeague.java34
-rw-r--r--src/main/java/design/model/Team.java40
-rw-r--r--src/main/java/design/persistence/JSONLeagueDatabase.java63
-rw-r--r--src/main/java/design/persistence/LeagueDatabase.java19
-rw-r--r--src/main/java/design/persistence/MasterDatabase.java2
9 files changed, 319 insertions, 0 deletions
diff --git a/src/main/java/design/model/Invite.java b/src/main/java/design/model/Invite.java
new file mode 100644
index 0000000..479f520
--- /dev/null
+++ b/src/main/java/design/model/Invite.java
@@ -0,0 +1,25 @@
+package design.model;
+
+import java.util.Date;
+
+public class Invite {
+ private final Team team;
+ private final Date sendDate;
+
+ public Invite(Team team, Date sendDate) {
+ this.team = team;
+ this.sendDate = sendDate;
+ }
+
+ public Team getTeam() {
+ return team;
+ }
+
+ public Date getSendDate() {
+ return sendDate;
+ }
+
+ public void accept(Golfer g) {
+ team.addMember(g);
+ }
+}
diff --git a/src/main/java/design/model/League.java b/src/main/java/design/model/League.java
new file mode 100644
index 0000000..98c9bdd
--- /dev/null
+++ b/src/main/java/design/model/League.java
@@ -0,0 +1,45 @@
+package design.model;
+
+import java.util.Date;
+
+public abstract class League {
+ private final int id;
+ private final String name;
+ private final Date registrationDate;
+ private final Date startDate;
+ private final Date endDate;
+ private final Golfer owner;
+
+ public League(int id, String name, Date registrationDate, Date startDate, Date endDate, Golfer owner) {
+ this.id = id;
+ this.name = name;
+ this.registrationDate = registrationDate;
+ this.startDate = startDate;
+ this.endDate = endDate;
+ this.owner = owner;
+ }
+
+ 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;
+ }
+}
diff --git a/src/main/java/design/model/Match.java b/src/main/java/design/model/Match.java
new file mode 100644
index 0000000..4f01c98
--- /dev/null
+++ b/src/main/java/design/model/Match.java
@@ -0,0 +1,57 @@
+package design.model;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+public class Match {
+ private final Course course;
+ private final Date dateScheduled;
+ private final LocalDateTime start;
+ private final int holeCount;
+ private final List<Round> rounds;
+
+ @JsonCreator
+ private Match(Course course, Date dateScheduled, LocalDateTime start, int holeCount, List<Round> rounds) {
+ this.course = course;
+ this.dateScheduled = dateScheduled;
+ this.start = start;
+ this.holeCount = holeCount;
+ this.rounds = rounds;
+ }
+
+ public Match(Course course, Date dateScheduled, LocalDateTime start, int holeCount) {
+ this.course = course;
+ this.dateScheduled = dateScheduled;
+ this.start = start;
+ this.holeCount = holeCount;
+ this.rounds = new ArrayList<>();
+ }
+
+ public Course getCourse() {
+ return course;
+ }
+
+ public Date getDateScheduled() {
+ return dateScheduled;
+ }
+
+ public LocalDateTime getStart() {
+ return start;
+ }
+
+ public int getHoleCount() {
+ return holeCount;
+ }
+
+ public boolean addRound(Round round) {
+ return rounds.add(round);
+ }
+
+ public Round[] getRounds() {
+ return rounds.toArray(Round[]::new);
+ }
+}
diff --git a/src/main/java/design/model/ScrambleLeague.java b/src/main/java/design/model/ScrambleLeague.java
new file mode 100644
index 0000000..7ff966e
--- /dev/null
+++ b/src/main/java/design/model/ScrambleLeague.java
@@ -0,0 +1,34 @@
+package design.model;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+public class ScrambleLeague extends League {
+ private final List<Team> participants;
+
+ @JsonCreator
+ private ScrambleLeague(int id, String name, Date registrationDate, Date startDate, Date endDate, Golfer owner, List<Team> participants) {
+ super(id, name, registrationDate, startDate, endDate, owner);
+ this.participants = participants;
+ }
+
+ public ScrambleLeague(int id, String name, Date registrationDate, Date startDate, Date endDate, Golfer owner) {
+ super(id, name, registrationDate, startDate, endDate, owner);
+ this.participants = new ArrayList<>();
+ }
+
+ public boolean addParticipants(Team e) {
+ return participants.add(e);
+ }
+
+ public boolean removeParticipants(Team o) {
+ return participants.remove(o);
+ }
+
+ public Team[] getParticipants() {
+ return participants.toArray(Team[]::new);
+ }
+}
diff --git a/src/main/java/design/model/StrokeLeague.java b/src/main/java/design/model/StrokeLeague.java
new file mode 100644
index 0000000..6bdde0a
--- /dev/null
+++ b/src/main/java/design/model/StrokeLeague.java
@@ -0,0 +1,34 @@
+package design.model;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+public class StrokeLeague extends League {
+ private final List<Golfer> participants;
+
+ @JsonCreator
+ private StrokeLeague(int id, String name, Date registrationDate, Date startDate, Date endDate, Golfer owner, List<Golfer> participants) {
+ super(id, name, registrationDate, startDate, endDate, owner);
+ this.participants = participants;
+ }
+
+ public StrokeLeague(int id, String name, Date registrationDate, Date startDate, Date endDate, Golfer owner) {
+ super(id, name, registrationDate, startDate, endDate, owner);
+ this.participants = new ArrayList<>();
+ }
+
+ public boolean addParticipants(Golfer e) {
+ return participants.add(e);
+ }
+
+ public boolean removeParticipants(Golfer o) {
+ return participants.remove(o);
+ }
+
+ public Golfer[] getParticipants() {
+ return participants.toArray(Golfer[]::new);
+ }
+}
diff --git a/src/main/java/design/model/Team.java b/src/main/java/design/model/Team.java
new file mode 100644
index 0000000..53b276e
--- /dev/null
+++ b/src/main/java/design/model/Team.java
@@ -0,0 +1,40 @@
+package design.model;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Team {
+ private String name;
+ private final List<Golfer> members;
+ private final Golfer owner;
+
+ public Team(String name, Golfer owner) {
+ this.name = name;
+ this.owner = owner;
+ this.members = new ArrayList<>();
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public Golfer[] getMembers() {
+ return members.toArray(Golfer[]::new);
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public boolean addMember(Golfer golfer) {
+ return members.add(golfer);
+ }
+
+ public boolean removeMember(Golfer g) {
+ return members.remove(g);
+ }
+
+ public Golfer getOwner() {
+ return owner;
+ }
+}
diff --git a/src/main/java/design/persistence/JSONLeagueDatabase.java b/src/main/java/design/persistence/JSONLeagueDatabase.java
new file mode 100644
index 0000000..01f4fc3
--- /dev/null
+++ b/src/main/java/design/persistence/JSONLeagueDatabase.java
@@ -0,0 +1,63 @@
+package design.persistence;
+
+import design.model.League;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
+
+public class JSONLeagueDatabase implements LeagueDatabase {
+
+ private static JSONLeagueDatabase INSTANCE;
+
+ public static JSONLeagueDatabase instance() {
+ if (INSTANCE == null) {
+ INSTANCE = new JSONLeagueDatabase("data/leaguedb.json");
+ }
+ return INSTANCE;
+ }
+
+ private final Map<Integer, League> cache;
+ private final File file;
+
+ public JSONLeagueDatabase(String filename) {
+ this.file = new File(filename);
+ this.cache = new HashMap<>();
+ }
+
+ private void load() {
+ //TODO impl
+ }
+
+ private void save() {
+ //TODO impl
+ }
+
+ @Override
+ public League getLeague(int id) {
+ return cache.get(id);
+ }
+
+ @Override
+ public League[] getLeagues() {
+ return cache.values().toArray(League[]::new);
+ }
+
+ @Override
+ public void addLeague(League league) {
+ cache.putIfAbsent(league.getId(), league);
+ save();
+ }
+
+ @Override
+ public void removeLeague(League league) {
+ cache.remove(league.getId());
+ save();
+ }
+
+ @Override
+ public void updateLeague(League league) {
+ cache.put(league.getId(), league);
+ save();
+ }
+}
diff --git a/src/main/java/design/persistence/LeagueDatabase.java b/src/main/java/design/persistence/LeagueDatabase.java
new file mode 100644
index 0000000..2ab3e30
--- /dev/null
+++ b/src/main/java/design/persistence/LeagueDatabase.java
@@ -0,0 +1,19 @@
+package design.persistence;
+
+import design.model.League;
+
+public interface LeagueDatabase {
+ static LeagueDatabase instance() {
+ return JSONLeagueDatabase.instance();
+ }
+
+ League getLeague(int id);
+
+ League[] getLeagues();
+
+ void addLeague(League league);
+
+ void removeLeague(League league);
+
+ void updateLeague(League league);
+}
diff --git a/src/main/java/design/persistence/MasterDatabase.java b/src/main/java/design/persistence/MasterDatabase.java
index 59e3ebd..86e326b 100644
--- a/src/main/java/design/persistence/MasterDatabase.java
+++ b/src/main/java/design/persistence/MasterDatabase.java
@@ -10,6 +10,8 @@ public interface MasterDatabase {
}
Course[] getCourses();
+
CourseList getCourseList(); // unique from courses as this is a composite of ICourses.
+
Course getCourse(int id);
}