summaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/main/java/design/controller/userinput/menus/ImportExportMenu.java70
-rw-r--r--src/main/java/design/model/DataHandler.java11
-rw-r--r--src/main/java/design/persistence/XMLParser.java26
3 files changed, 83 insertions, 24 deletions
diff --git a/src/main/java/design/controller/userinput/menus/ImportExportMenu.java b/src/main/java/design/controller/userinput/menus/ImportExportMenu.java
index 43970ea..4c7df00 100644
--- a/src/main/java/design/controller/userinput/menus/ImportExportMenu.java
+++ b/src/main/java/design/controller/userinput/menus/ImportExportMenu.java
@@ -5,13 +5,26 @@ import design.controller.userinput.MenuOption;
import design.persistence.JSONPersonalDatabase;
import design.persistence.XMLParser;
+import java.io.File;
+import java.io.IOException;
import java.util.List;
+import java.util.Map;
+import java.util.Scanner;
public class ImportExportMenu extends Menu {
-
- String currentFormat = "JSON";
XMLParser xmlParser = new XMLParser();
+ private static final Map<String, Map<Boolean, DataHandler>> handlers = Map.of(
+ "json", Map.of(
+ true, new PersonalJsonHandler(),
+ false, new LeagueJsonHandler()
+ ),
+ "csv", Map.of(
+ true, new PersonalCsvHandler(),
+ false, new LeagueCsvHandler()
+ ));
+
+
@Override
public String getTitle() {
return "import export menu";
@@ -24,23 +37,46 @@ public class ImportExportMenu extends Menu {
opts.add(new MenuOption("return to main menu", () -> new MainMenu().present()));
- opts.add(new MenuOption("set to XML", () -> {currentFormat = "XML";}));
- opts.add(new MenuOption("set to JSON", () -> {currentFormat = "JSON";}));
+ opts.add(new MenuOption("import league...", () -> promptForPath(true, false)));
+ opts.add(new MenuOption("export league...", () -> promptForPath(false, false)));
+ opts.add(new MenuOption("import personal profile...", () -> promptForPath(true, true)));
+ opts.add(new MenuOption("export personal profile...", () -> promptForPath(false, true)));
+ return opts;
+ }
- // TO DO: think of better solution for menus...i don't want to layer them deeply but saving format in a string is kind of a dumb solution.
- opts.add(new MenuOption("import league...", () -> {}));
- opts.add(new MenuOption("export league...", () -> {}));
- opts.add(new MenuOption("import personal profile...", () -> {
- // if(currentFormat == "JSON")
- // {
- // JSONPersonalDatabase.instance().importData(null);
- // }
- }));
- opts.add(new MenuOption("export personal profile...", () -> {
- }));
+ private void promptForPath(boolean isImporting, boolean isPersonalProfile)
+ {
+ System.out.println("Enter file path: ");
+ Scanner sc = new Scanner(System.in);
+ String path = sc.nextLine();
+ File file = new File(path);
- return opts;
+ String ext = getExtension(path);
+ Map<Boolean, DataHandler> map = handlers.get(ext);
+ if (map == null) {
+ System.out.println("Unsupported file type: " + ext);
+ return;
+ }
+
+ DataHandler handler = map.get(isPersonalProfile);
+ if (handler == null) {
+ System.out.println("No handler for this profile type.");
+ return;
+ }
+
+ try {
+ if (isImporting)
+ handler.importData(file);
+ else
+ handler.exportData(file);
+ } catch (IOException e) {
+ System.err.println("I/O error: " + e.getMessage());
+ }
}
-} \ No newline at end of file
+ private static String getExtension(String fileName) {
+ int i = fileName.lastIndexOf('.');
+ return (i >= 0) ? fileName.substring(i + 1).toLowerCase() : "";
+ }
+}
diff --git a/src/main/java/design/model/DataHandler.java b/src/main/java/design/model/DataHandler.java
new file mode 100644
index 0000000..e7dda33
--- /dev/null
+++ b/src/main/java/design/model/DataHandler.java
@@ -0,0 +1,11 @@
+package design.model;
+
+import java.io.File;
+import java.io.IOException;
+
+public interface DataHandler {
+ void importPersonalData(File file) throws IOException;
+ void exportPersonalData(File file) throws IOException;
+ void importLeagueData(File file) throws IOException;
+ void exportLeagueData(File file) throws IOException;
+} \ No newline at end of file
diff --git a/src/main/java/design/persistence/XMLParser.java b/src/main/java/design/persistence/XMLParser.java
index 472931a..3d04a03 100644
--- a/src/main/java/design/persistence/XMLParser.java
+++ b/src/main/java/design/persistence/XMLParser.java
@@ -1,6 +1,7 @@
package design.persistence;
import java.io.File;
import java.io.IOException;
+import design.model.DataHandler;
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -9,24 +10,35 @@ import com.fasterxml.jackson.dataformat.xml.XmlMapper;
-public class XMLParser {
-
+public class XMLParser implements DataHandler
+{
private final ObjectMapper jsonMapper = new ObjectMapper();
private final XmlMapper xmlMapper = new XmlMapper();
- public File exportData() throws IOException {
+ public void exportPersonalData(File fileName) throws IOException {
File jsonData = JSONPersonalDatabase.instance().exportData();
Golfer[] golfers = jsonMapper.readValue(jsonData, Golfer[].class);
- File xmlFile = new File("data/data.xml");
+ File xmlFile = new File(fileName + ".xml");
xmlMapper.writerWithDefaultPrettyPrinter().writeValue(xmlFile, golfers);
- return xmlFile;
}
- public void importData(File xmlFile) throws IOException {
- Golfer[] golfers = xmlMapper.readValue(xmlFile, Golfer[].class);
+ public void importPersonalData(File fileName) throws IOException {
+ Golfer[] golfers = xmlMapper.readValue(fileName, Golfer[].class);
File tempJson = File.createTempFile("imported", ".json");
jsonMapper.writerWithDefaultPrettyPrinter().writeValue(tempJson, golfers);
JSONPersonalDatabase.instance().importData(tempJson);
tempJson.delete();
}
+
+ public void exportLeagueData(File fileName)
+ {
+ // TO DO: exporting league data
+ }
+
+ public void importLeagueData(File fileName)
+ {
+ // TO DO: importing league data
+ }
}
+
+