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/JSONHandler.java28
-rw-r--r--src/main/java/design/persistence/JSONLeagueDatabase.java21
-rw-r--r--src/main/java/design/persistence/JSONPersonalDatabase.java27
-rw-r--r--src/main/java/design/persistence/LeagueDatabase.java3
-rw-r--r--src/main/java/design/persistence/PersonalDatabase.java5
-rw-r--r--src/main/java/design/persistence/XMLHandler.java66
-rw-r--r--src/main/java/design/persistence/importexport/DataHandler.java11
-rw-r--r--src/main/java/design/persistence/importexport/DataSource.java12
-rw-r--r--src/main/java/design/persistence/importexport/JSONHandler.java30
-rw-r--r--src/main/java/design/persistence/importexport/XMLHandler.java34
10 files changed, 114 insertions, 123 deletions
diff --git a/src/main/java/design/persistence/JSONHandler.java b/src/main/java/design/persistence/JSONHandler.java
deleted file mode 100644
index 77ec987..0000000
--- a/src/main/java/design/persistence/JSONHandler.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package design.persistence;
-import java.io.File;
-import java.io.IOException;
-import design.model.DataHandler;
-
-public class JSONHandler implements DataHandler
-{
-
- public void exportPersonalData(File file) throws IOException {
- JSONPersonalDatabase.instance().exportData(file);
- }
-
- public void importPersonalData(File file) throws IOException {
- JSONPersonalDatabase.instance().importData(file);
- }
-
- public void exportLeagueData(File file) throws IOException
- {
- JSONLeagueDatabase.instance().importData(file);
- }
-
- public void importLeagueData(File file) throws IOException
- {
- JSONLeagueDatabase.instance().exportData(file);
- }
-}
-
-
diff --git a/src/main/java/design/persistence/JSONLeagueDatabase.java b/src/main/java/design/persistence/JSONLeagueDatabase.java
index edc649b..795c582 100644
--- a/src/main/java/design/persistence/JSONLeagueDatabase.java
+++ b/src/main/java/design/persistence/JSONLeagueDatabase.java
@@ -13,8 +13,6 @@ import design.model.League;
import java.io.File;
import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.StandardCopyOption;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
@@ -100,18 +98,19 @@ public class JSONLeagueDatabase implements LeagueDatabase {
save();
}
- public File exportData(File newFile) throws IOException{
- Files.copy(file.toPath(), newFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
- return newFile;
- }
-
- public void importData(File newFile) throws IOException {
- League[] newLeagues = mapper.readValue(newFile, League[].class);
+ @Override
+ public void importData(JsonNode tree) throws IOException {
+ League[] data = mapper.treeToValue(tree, League[].class);
cache.clear();
- for (League l: newLeagues) {
- cache.put(l.getId(), l);
+ for (League league : data) {
+ cache.put(league.getId(), league);
}
save();
}
+ @Override
+ public JsonNode exportData() {
+ Object[] data = cache.values().toArray();
+ return mapper.valueToTree(data);
+ }
}
diff --git a/src/main/java/design/persistence/JSONPersonalDatabase.java b/src/main/java/design/persistence/JSONPersonalDatabase.java
index 3fc5cab..3e70629 100644
--- a/src/main/java/design/persistence/JSONPersonalDatabase.java
+++ b/src/main/java/design/persistence/JSONPersonalDatabase.java
@@ -13,8 +13,6 @@ import design.model.League;
import java.io.File;
import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.StandardCopyOption;
import java.util.HashMap;
import java.util.Map;
@@ -38,9 +36,6 @@ public class JSONPersonalDatabase implements PersonalDatabase {
this.cache = new HashMap<>();
this.mapper = new ObjectMapper();
- // TODO: Once the saved JSON matches the model, consider removing.
- // TEMP: tolerate unknown props while the model stabilizes
- mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
SimpleModule module = new SimpleModule();
module.addDeserializer(Course.class, new Serializers.CourseIdDeserializer());
@@ -48,6 +43,7 @@ public class JSONPersonalDatabase implements PersonalDatabase {
module.addSerializer(League.class, new Serializers.LeagueIDSerializer());
module.addDeserializer(League.class, new Serializers.LeagueIDDeserializer());
mapper.registerModule(module);
+ mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
mapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
mapper.registerModule(new ParameterNamesModule(JsonCreator.Mode.PROPERTIES));
mapper.registerModule(new JavaTimeModule());
@@ -101,18 +97,19 @@ public class JSONPersonalDatabase implements PersonalDatabase {
save();
}
-
- public File exportData(File newFile) throws IOException{
- Files.copy(file.toPath(), newFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
- return newFile;
- }
-
- public void importData(File newFile) throws IOException {
- Golfer[] newGolfers = mapper.readValue(newFile, Golfer[].class);
+ @Override
+ public void importData(JsonNode tree) throws IOException {
+ Golfer[] data = mapper.treeToValue(tree, Golfer[].class);
cache.clear();
- for (Golfer g : newGolfers) {
- cache.put(g.getUsername(), g);
+ for (Golfer golfer : data) {
+ cache.put(golfer.getUsername(), golfer);
}
save();
}
+
+ @Override
+ public JsonNode exportData() {
+ Object[] data = cache.values().toArray();
+ return mapper.valueToTree(data);
+ }
}
diff --git a/src/main/java/design/persistence/LeagueDatabase.java b/src/main/java/design/persistence/LeagueDatabase.java
index 953624d..9f835ff 100644
--- a/src/main/java/design/persistence/LeagueDatabase.java
+++ b/src/main/java/design/persistence/LeagueDatabase.java
@@ -1,10 +1,11 @@
package design.persistence;
import design.model.League;
+import design.persistence.importexport.DataSource;
import java.io.IOException;
-public interface LeagueDatabase {
+public interface LeagueDatabase extends DataSource {
static LeagueDatabase instance() {
return JSONLeagueDatabase.instance();
}
diff --git a/src/main/java/design/persistence/PersonalDatabase.java b/src/main/java/design/persistence/PersonalDatabase.java
index 63f9182..77e43cc 100644
--- a/src/main/java/design/persistence/PersonalDatabase.java
+++ b/src/main/java/design/persistence/PersonalDatabase.java
@@ -1,10 +1,11 @@
package design.persistence;
import design.model.Golfer;
+import design.persistence.importexport.DataSource;
+
import java.io.IOException;
-import java.io.File;
-public interface PersonalDatabase {
+public interface PersonalDatabase extends DataSource {
static PersonalDatabase instance() {
return JSONPersonalDatabase.instance();
diff --git a/src/main/java/design/persistence/XMLHandler.java b/src/main/java/design/persistence/XMLHandler.java
deleted file mode 100644
index 706dabd..0000000
--- a/src/main/java/design/persistence/XMLHandler.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package design.persistence;
-import java.io.File;
-import java.io.IOException;
-import design.model.DataHandler;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-
-import design.model.Golfer;
-import com.fasterxml.jackson.dataformat.xml.XmlMapper;
-
-
-
-public class XMLHandler implements DataHandler
-{
- private final ObjectMapper jsonMapper = new ObjectMapper();
- private final XmlMapper xmlMapper = new XmlMapper();
-
- public void exportPersonalData(File file) throws IOException {
- // get our json data just from the JSON database
- File jsonData = JSONPersonalDatabase.instance().exportData(file);
-
- // read the the data from the JSON, as a JsonNode.
- JsonNode golfersNode = jsonMapper.readTree(jsonData);
-
- // XML requires a parent node, we can't just throw the golfersnode into the xml or else it will only produce the first element
- ObjectNode root = xmlMapper.createObjectNode();
- root.set("golfer", golfersNode);
-
- //write to the xml file.
- xmlMapper.writerWithDefaultPrettyPrinter().writeValue(file, root);
- }
-
- public void importPersonalData(File file) throws IOException {
-
- // read our root, the object node
- JsonNode root = xmlMapper.readTree(file);
-
- // debug print line
- System.out.println(root.toPrettyString());
-
- // !!! here is where it's failing...our root is not serializable to an array of golfers. !!!
- Golfer[] golfers = xmlMapper.treeToValue(root, Golfer[].class);
-
- // from here out should be good
- File tempJson = File.createTempFile("imported", ".json");
- jsonMapper.writerWithDefaultPrettyPrinter().writeValue(tempJson, golfers);
- JSONPersonalDatabase.instance().importData(tempJson);
- tempJson.delete();
- }
-
-
-
- public void exportLeagueData(File file) throws IOException
- {
- // TO DO: exporting league data
- }
-
- public void importLeagueData(File file) throws IOException
- {
- // TO DO: importing league data
- }
-}
-
-
diff --git a/src/main/java/design/persistence/importexport/DataHandler.java b/src/main/java/design/persistence/importexport/DataHandler.java
new file mode 100644
index 0000000..59df9be
--- /dev/null
+++ b/src/main/java/design/persistence/importexport/DataHandler.java
@@ -0,0 +1,11 @@
+package design.persistence.importexport;
+
+import java.io.File;
+import java.io.IOException;
+
+public interface DataHandler {
+
+ void importData(File file) throws IOException;
+
+ void exportData(File file) throws IOException;
+}
diff --git a/src/main/java/design/persistence/importexport/DataSource.java b/src/main/java/design/persistence/importexport/DataSource.java
new file mode 100644
index 0000000..5290e33
--- /dev/null
+++ b/src/main/java/design/persistence/importexport/DataSource.java
@@ -0,0 +1,12 @@
+package design.persistence.importexport;
+
+import com.fasterxml.jackson.databind.JsonNode;
+
+import java.io.IOException;
+
+public interface DataSource {
+
+ void importData(JsonNode tree) throws IOException;
+
+ JsonNode exportData() throws IOException;
+} \ No newline at end of file
diff --git a/src/main/java/design/persistence/importexport/JSONHandler.java b/src/main/java/design/persistence/importexport/JSONHandler.java
new file mode 100644
index 0000000..239eb6b
--- /dev/null
+++ b/src/main/java/design/persistence/importexport/JSONHandler.java
@@ -0,0 +1,30 @@
+package design.persistence.importexport;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.json.JsonMapper;
+
+import java.io.File;
+import java.io.IOException;
+
+public class JSONHandler implements DataHandler {
+
+ private final DataSource dataSource;
+ private final JsonMapper jsonMapper = new JsonMapper();
+
+ public JSONHandler(DataSource dataSource) {
+ this.dataSource = dataSource;
+ }
+
+ @Override
+ public void importData(File file) throws IOException {
+ JsonNode tree = jsonMapper.readTree(file);
+ dataSource.importData(tree);
+ }
+
+ @Override
+ public void exportData(File file) throws IOException{
+ JsonNode tree = dataSource.exportData();
+ jsonMapper.writerWithDefaultPrettyPrinter().writeValue(file, tree);
+ }
+}
+
+
diff --git a/src/main/java/design/persistence/importexport/XMLHandler.java b/src/main/java/design/persistence/importexport/XMLHandler.java
new file mode 100644
index 0000000..1a16b90
--- /dev/null
+++ b/src/main/java/design/persistence/importexport/XMLHandler.java
@@ -0,0 +1,34 @@
+package design.persistence.importexport;
+import java.io.File;
+import java.io.IOException;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.fasterxml.jackson.dataformat.xml.XmlMapper;
+
+public class XMLHandler implements DataHandler {
+
+ private final DataSource dataSource;
+ private final XmlMapper xmlMapper = new XmlMapper();
+
+ public XMLHandler(DataSource dataSource) {
+ this.dataSource = dataSource;
+ }
+
+ @Override
+ public void importData(File file) throws IOException {
+ JsonNode tree = xmlMapper.readTree(file);
+ JsonNode unwrapped = tree.get("items");
+ dataSource.importData(unwrapped);
+ }
+
+ @Override
+ public void exportData(File file) throws IOException {
+ JsonNode tree = dataSource.exportData();
+ ObjectNode wrapper = xmlMapper.createObjectNode();
+ wrapper.set("items", tree);
+ xmlMapper.writerWithDefaultPrettyPrinter().withRootName("export").writeValue(file, wrapper);
+ }
+}
+
+