diff options
Diffstat (limited to 'src/main')
| -rw-r--r-- | src/main/java/design/controller/userinput/menus/ImportExportMenu.java | 70 | ||||
| -rw-r--r-- | src/main/java/design/model/DataHandler.java | 11 | ||||
| -rw-r--r-- | src/main/java/design/persistence/XMLParser.java | 26 |
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 + } } + + |
