summaryrefslogtreecommitdiff
path: root/src/main/java/design/persistence
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/design/persistence')
-rw-r--r--src/main/java/design/persistence/CSVMasterDatabase.java17
-rw-r--r--src/main/java/design/persistence/JSONPersonalDatabase.java40
-rw-r--r--src/main/java/design/persistence/MasterDatabase.java4
-rw-r--r--src/main/java/design/persistence/PersonalDatabase.java2
4 files changed, 54 insertions, 9 deletions
diff --git a/src/main/java/design/persistence/CSVMasterDatabase.java b/src/main/java/design/persistence/CSVMasterDatabase.java
index 94ac470..fe89191 100644
--- a/src/main/java/design/persistence/CSVMasterDatabase.java
+++ b/src/main/java/design/persistence/CSVMasterDatabase.java
@@ -22,7 +22,7 @@ public class CSVMasterDatabase implements MasterDatabase {
private final CsvMapper mapper;
private final File file;
- public CSVMasterDatabase(String filename) throws IOException {
+ public CSVMasterDatabase(String filename) {
this.cache = new ArrayList<>();
this.mapper = new CsvMapper();
this.file = new File(filename);
@@ -31,7 +31,11 @@ public class CSVMasterDatabase implements MasterDatabase {
module.addDeserializer(Course.class, new CourseDeserializer());
mapper.registerModule(module);
- load();
+ try {
+ load();
+ } catch (IOException ex) {
+ throw new RuntimeException(ex);
+ }
}
public void load() throws IOException {
@@ -49,15 +53,18 @@ public class CSVMasterDatabase implements MasterDatabase {
}
@Override
- public Course getCourse(String name) {
- return null;
+ public Course getCourse(int id) {
+ return cache.get(id);
}
private static class CourseDeserializer extends JsonDeserializer<Course> {
+ int curID = 0;
+
@Override
public Course deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
ObjectNode node = p.getCodec().readTree(p);
+ int id = curID++;
String name = node.get("Course Name").asText();
double difficulty = node.get("Difficulty Rating").asDouble();
String location = node.get("Location").asText();
@@ -70,7 +77,7 @@ public class CSVMasterDatabase implements MasterDatabase {
holeList.add(new Hole(i + 1, Integer.parseInt(parValues[i].trim())));
}
- return new Course(name, (int) difficulty, location, holes, totalPar, holeList);
+ return new Course(id, name, (int) difficulty, location, holes, totalPar, holeList);
}
}
}
diff --git a/src/main/java/design/persistence/JSONPersonalDatabase.java b/src/main/java/design/persistence/JSONPersonalDatabase.java
index 3ec0012..511d962 100644
--- a/src/main/java/design/persistence/JSONPersonalDatabase.java
+++ b/src/main/java/design/persistence/JSONPersonalDatabase.java
@@ -1,6 +1,12 @@
package design.persistence;
-import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.PropertyAccessor;
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.databind.*;
+import com.fasterxml.jackson.databind.module.SimpleModule;
+import design.model.Course;
import design.model.Golfer;
import java.io.File;
@@ -14,12 +20,23 @@ public class JSONPersonalDatabase implements PersonalDatabase {
private final ObjectMapper mapper;
private final File file;
- public JSONPersonalDatabase(String filename) throws IOException {
+ public JSONPersonalDatabase(String filename) {
this.file = new File(filename);
this.cache = new HashMap<>();
this.mapper = new ObjectMapper();
- load();
+ SimpleModule module = new SimpleModule();
+ module.addDeserializer(Course.class, new CourseIdDeserializer());
+ module.addSerializer(Course.class, new CourseIdSerializer());
+ mapper.registerModule(module);
+ mapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
+ mapper.writerWithDefaultPrettyPrinter();
+
+ try {
+ load();
+ } catch (IOException ex) {
+ throw new RuntimeException(ex);
+ }
}
private void load() throws IOException {
@@ -62,4 +79,21 @@ public class JSONPersonalDatabase implements PersonalDatabase {
cache.put(golfer.getUsername(), golfer);
save();
}
+
+ private static class CourseIdSerializer extends JsonSerializer<Course> {
+ @Override
+ public void serialize(Course course, JsonGenerator gen, SerializerProvider serializers) throws IOException {
+ gen.writeNumber(course.getId());
+ }
+ }
+
+ private static class CourseIdDeserializer extends JsonDeserializer<Course> {
+ MasterDatabase masterDB = MasterDatabase.INSTANCE;
+
+ @Override
+ public Course deserialize(JsonParser p, DeserializationContext context) throws IOException {
+ int id = p.getValueAsInt();
+ return masterDB.getCourse(id);
+ }
+ }
}
diff --git a/src/main/java/design/persistence/MasterDatabase.java b/src/main/java/design/persistence/MasterDatabase.java
index 9dcfc1f..2852349 100644
--- a/src/main/java/design/persistence/MasterDatabase.java
+++ b/src/main/java/design/persistence/MasterDatabase.java
@@ -3,6 +3,8 @@ package design.persistence;
import design.model.Course;
public interface MasterDatabase {
+ public static final MasterDatabase INSTANCE = new CSVMasterDatabase("data/golf_courses_1000.csv");
+
Course[] getCourses();
- Course getCourse(String name);
+ Course getCourse(int id);
}
diff --git a/src/main/java/design/persistence/PersonalDatabase.java b/src/main/java/design/persistence/PersonalDatabase.java
index 783e982..524263b 100644
--- a/src/main/java/design/persistence/PersonalDatabase.java
+++ b/src/main/java/design/persistence/PersonalDatabase.java
@@ -5,6 +5,8 @@ import design.model.Golfer;
import java.io.IOException;
public interface PersonalDatabase {
+ public static final PersonalDatabase INSTANCE = new JSONPersonalDatabase("data/personaldb.json");
+
Golfer[] getGolfers();
Golfer getGolfer(String name);
void addGolfer(Golfer golfer) throws IOException;