summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/leaguedb.json13
-rw-r--r--data/personaldb.json21
-rw-r--r--src/main/java/design/model/League.java19
-rw-r--r--src/main/java/design/model/ScrambleLeague.java12
-rw-r--r--src/main/java/design/model/StrokeLeague.java2
-rw-r--r--src/main/java/design/persistence/JSONLeagueDatabase.java4
-rw-r--r--src/main/java/design/persistence/JSONPersonalDatabase.java4
7 files changed, 64 insertions, 11 deletions
diff --git a/data/leaguedb.json b/data/leaguedb.json
new file mode 100644
index 0000000..1c3cef0
--- /dev/null
+++ b/data/leaguedb.json
@@ -0,0 +1,13 @@
+[
+ {
+ "type": "scramble",
+ "id": 1,
+ "name": "l",
+ "registrationDate": 946702800000,
+ "startDate": 946702800000,
+ "endDate": 946702800000,
+ "owner": "sowgro",
+ "participants": [],
+ "schedule": []
+ }
+] \ No newline at end of file
diff --git a/data/personaldb.json b/data/personaldb.json
index 078c1bb..9b9709d 100644
--- a/data/personaldb.json
+++ b/data/personaldb.json
@@ -82,11 +82,11 @@
],
"currentHoleIndex": 2,
"totalSwings": 5,
+ "totalDistance": 1108.0,
"currentHole": {
"number": 3,
"par": 4
- },
- "totalDistance": 1108.0
+ }
},
{
"course": 1,
@@ -118,12 +118,23 @@
],
"currentHoleIndex": 9,
"totalSwings": 1,
+ "totalDistance": 204.0,
"currentHole": {
"number": 10,
"par": 3
- },
- "totalDistance": 204.0
+ }
}
- ]
+ ],
+ "invites": []
+ },
+ {
+ "clubs": [],
+ "nextClubId": 1,
+ "username": "sowgro",
+ "passwordHash": 389416948,
+ "fullName": "tyler f",
+ "courses": [],
+ "rounds": [],
+ "invites": []
}
] \ No newline at end of file
diff --git a/src/main/java/design/model/League.java b/src/main/java/design/model/League.java
index 6dab033..881e25f 100644
--- a/src/main/java/design/model/League.java
+++ b/src/main/java/design/model/League.java
@@ -1,11 +1,22 @@
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;
@@ -13,7 +24,7 @@ public abstract class League {
private final Date startDate;
private final Date endDate;
private final Golfer owner;
- private List<Match> schedule;
+ private final List<Match> schedule;
@JsonCreator
protected League(int id, String name, Date registrationDate, Date startDate, Date endDate, Golfer owner, List<Match> schedule) {
@@ -23,7 +34,7 @@ public abstract class League {
this.startDate = startDate;
this.endDate = endDate;
this.owner = owner;
- this.schedule = schedule;
+ this.schedule = schedule != null ? schedule : new ArrayList<>();
}
public League(String name, Date registrationDate, Date startDate, Date endDate, Golfer owner) {
@@ -60,8 +71,8 @@ public abstract class League {
return owner;
}
- public List<Match> getSchedule() {
- return schedule;
+ public Match[] getSchedule() {
+ return schedule.toArray(Match[]::new);
}
public void addMatchToSchedule(Match match) {
diff --git a/src/main/java/design/model/ScrambleLeague.java b/src/main/java/design/model/ScrambleLeague.java
index 92e7099..d372264 100644
--- a/src/main/java/design/model/ScrambleLeague.java
+++ b/src/main/java/design/model/ScrambleLeague.java
@@ -1,11 +1,14 @@
package design.model;
import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Date;
import java.util.List;
+@JsonTypeName("scramble")
public class ScrambleLeague extends League {
private final List<Team> participants;
@@ -31,4 +34,13 @@ public class ScrambleLeague extends League {
public Team[] getParticipants() {
return participants.toArray(Team[]::new);
}
+
+ public Team locateTeam(Golfer golfer) {
+ for (Team participant : participants) {
+ if (List.of(participant.getMembers()).contains(golfer)) {
+ return participant;
+ }
+ }
+ return null;
+ }
}
diff --git a/src/main/java/design/model/StrokeLeague.java b/src/main/java/design/model/StrokeLeague.java
index f09cabf..2b787b5 100644
--- a/src/main/java/design/model/StrokeLeague.java
+++ b/src/main/java/design/model/StrokeLeague.java
@@ -1,11 +1,13 @@
package design.model;
import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
+@JsonTypeName("stroke")
public class StrokeLeague extends League {
private final List<Golfer> participants;
diff --git a/src/main/java/design/persistence/JSONLeagueDatabase.java b/src/main/java/design/persistence/JSONLeagueDatabase.java
index 8b201e6..8a55065 100644
--- a/src/main/java/design/persistence/JSONLeagueDatabase.java
+++ b/src/main/java/design/persistence/JSONLeagueDatabase.java
@@ -3,7 +3,9 @@ package design.persistence;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.PropertyAccessor;
+import com.fasterxml.jackson.core.StreamReadFeature;
import com.fasterxml.jackson.databind.*;
+import com.fasterxml.jackson.databind.json.JsonMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.module.paramnames.ParameterNamesModule;
@@ -36,7 +38,7 @@ public class JSONLeagueDatabase implements LeagueDatabase {
public JSONLeagueDatabase(String filename) {
this.file = new File(filename);
this.cache = new HashMap<>();
- this.mapper = new ObjectMapper();
+ this.mapper = JsonMapper.builder().enable(StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION).build();
SimpleModule module = new SimpleModule();
module.addDeserializer(Course.class, new Serializers.CourseIdDeserializer());
diff --git a/src/main/java/design/persistence/JSONPersonalDatabase.java b/src/main/java/design/persistence/JSONPersonalDatabase.java
index 0e95437..30c280a 100644
--- a/src/main/java/design/persistence/JSONPersonalDatabase.java
+++ b/src/main/java/design/persistence/JSONPersonalDatabase.java
@@ -3,7 +3,9 @@ package design.persistence;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.PropertyAccessor;
+import com.fasterxml.jackson.core.StreamReadFeature;
import com.fasterxml.jackson.databind.*;
+import com.fasterxml.jackson.databind.json.JsonMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.module.paramnames.ParameterNamesModule;
@@ -34,7 +36,7 @@ public class JSONPersonalDatabase implements PersonalDatabase {
private JSONPersonalDatabase(String filename) {
this.file = new File(filename);
this.cache = new HashMap<>();
- this.mapper = new ObjectMapper();
+ this.mapper = JsonMapper.builder().enable(StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION).build();;
// TODO: Once the saved JSON matches the model, consider removing.
// TEMP: tolerate unknown props while the model stabilizes