From 58c4432815d0dbe2173dbb1a4aed4c6683a10e1a Mon Sep 17 00:00:00 2001 From: WillemDalton Date: Mon, 10 Nov 2025 19:47:15 -0500 Subject: a bit more progress on the menu for import export --- .../userinput/menus/ImportExportMenu.java | 25 ++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) (limited to 'src/main/java/design/controller/userinput') diff --git a/src/main/java/design/controller/userinput/menus/ImportExportMenu.java b/src/main/java/design/controller/userinput/menus/ImportExportMenu.java index ed313d7..43970ea 100644 --- a/src/main/java/design/controller/userinput/menus/ImportExportMenu.java +++ b/src/main/java/design/controller/userinput/menus/ImportExportMenu.java @@ -2,10 +2,16 @@ package design.controller.userinput.menus; import design.controller.userinput.Menu; import design.controller.userinput.MenuOption; +import design.persistence.JSONPersonalDatabase; +import design.persistence.XMLParser; import java.util.List; public class ImportExportMenu extends Menu { + + String currentFormat = "JSON"; + XMLParser xmlParser = new XMLParser(); + @Override public String getTitle() { return "import export menu"; @@ -15,17 +21,24 @@ public class ImportExportMenu extends Menu { public List getMenuOptions() { List opts = new java.util.ArrayList<>(); + opts.add(new MenuOption("return to main menu", () -> new MainMenu().present())); - opts.add(new MenuOption("set to XML", () -> new MainMenu().present())); - opts.add(new MenuOption("set to JSON", () -> 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...", () -> { - })); + // 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...", () -> {})); - opts.add(new MenuOption("export personal profile...", () -> {})); + opts.add(new MenuOption("import personal profile...", () -> { + // if(currentFormat == "JSON") + // { + // JSONPersonalDatabase.instance().importData(null); + // } + })); + opts.add(new MenuOption("export personal profile...", () -> { + })); return opts; } -- cgit v1.2.3 From f7102fd39b266b3d31fe72448b5d64d139648dee Mon Sep 17 00:00:00 2001 From: WillemDalton Date: Tue, 11 Nov 2025 08:50:31 -0500 Subject: progress on import/export --- .../userinput/menus/ImportExportMenu.java | 70 ++++++++++++++++------ 1 file changed, 53 insertions(+), 17 deletions(-) (limited to 'src/main/java/design/controller/userinput') 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> 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 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() : ""; + } +} -- cgit v1.2.3 From 94ac731c00da6022909bbb96c835d7c63204da73 Mon Sep 17 00:00:00 2001 From: WillemDalton Date: Tue, 11 Nov 2025 09:01:01 -0500 Subject: progress on importing exporting --- .../userinput/menus/ImportExportMenu.java | 52 ++++++++++------------ .../controller/userinput/menus/UserSettings.java | 9 +--- 2 files changed, 25 insertions(+), 36 deletions(-) (limited to 'src/main/java/design/controller/userinput') diff --git a/src/main/java/design/controller/userinput/menus/ImportExportMenu.java b/src/main/java/design/controller/userinput/menus/ImportExportMenu.java index 4c7df00..db861c5 100644 --- a/src/main/java/design/controller/userinput/menus/ImportExportMenu.java +++ b/src/main/java/design/controller/userinput/menus/ImportExportMenu.java @@ -2,8 +2,8 @@ package design.controller.userinput.menus; import design.controller.userinput.Menu; import design.controller.userinput.MenuOption; -import design.persistence.JSONPersonalDatabase; -import design.persistence.XMLParser; +import design.persistence.JSONHandler; +import design.persistence.XMLHandler; import java.io.File; import java.io.IOException; @@ -11,20 +11,14 @@ import java.util.List; import java.util.Map; import java.util.Scanner; -public class ImportExportMenu extends Menu { - XMLParser xmlParser = new XMLParser(); +import design.model.DataHandler; - private static final Map> handlers = Map.of( - "json", Map.of( - true, new PersonalJsonHandler(), - false, new LeagueJsonHandler() - ), - "csv", Map.of( - true, new PersonalCsvHandler(), - false, new LeagueCsvHandler() - )); +public class ImportExportMenu extends Menu { + private static final Map handlers = Map.of( + "xml", new XMLHandler(), + "json", new JSONHandler() + ); - @Override public String getTitle() { return "import export menu"; @@ -49,27 +43,29 @@ public class ImportExportMenu extends Menu { { System.out.println("Enter file path: "); Scanner sc = new Scanner(System.in); - String path = sc.nextLine(); - File file = new File(path); + String filePath = sc.nextLine(); + File file = new File(filePath); - String ext = getExtension(path); - Map map = handlers.get(ext); - if (map == null) { - System.out.println("Unsupported file type: " + ext); - return; - } + String ext = getExtension(filePath); + DataHandler handler = handlers.get(ext); - DataHandler handler = map.get(isPersonalProfile); if (handler == null) { - System.out.println("No handler for this profile type."); + System.out.println("Unsupported file type: " + ext); return; } try { - if (isImporting) - handler.importData(file); - else - handler.exportData(file); + if (isImporting) { + if (isPersonalProfile) + handler.importPersonalData(file); + else + handler.importLeagueData(file); + } else { + if (isPersonalProfile) + handler.exportPersonalData(file); + else + handler.exportLeagueData(file); + } } catch (IOException e) { System.err.println("I/O error: " + e.getMessage()); } diff --git a/src/main/java/design/controller/userinput/menus/UserSettings.java b/src/main/java/design/controller/userinput/menus/UserSettings.java index d029e45..865b00d 100644 --- a/src/main/java/design/controller/userinput/menus/UserSettings.java +++ b/src/main/java/design/controller/userinput/menus/UserSettings.java @@ -60,15 +60,8 @@ public class UserSettings extends Menu { this.present(); })); - - opts.add(new MenuOption("import...", () -> { - - })); + opts.add(new MenuOption("manage data...", () -> new ImportExportMenu().present())); - opts.add(new MenuOption("export...", () -> { - - this.present(); - })); return opts; } -- cgit v1.2.3 From d29548bd7d04375578361f6a75659c046a270b75 Mon Sep 17 00:00:00 2001 From: WillemDalton Date: Tue, 11 Nov 2025 16:42:39 -0500 Subject: fixed exporting xml --- src/main/java/design/controller/userinput/menus/ImportExportMenu.java | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/main/java/design/controller/userinput') diff --git a/src/main/java/design/controller/userinput/menus/ImportExportMenu.java b/src/main/java/design/controller/userinput/menus/ImportExportMenu.java index db861c5..dbad0e3 100644 --- a/src/main/java/design/controller/userinput/menus/ImportExportMenu.java +++ b/src/main/java/design/controller/userinput/menus/ImportExportMenu.java @@ -69,6 +69,8 @@ public class ImportExportMenu extends Menu { } catch (IOException e) { System.err.println("I/O error: " + e.getMessage()); } + + new ImportExportMenu().present(); } private static String getExtension(String fileName) { -- cgit v1.2.3 From 9adc51f8d74577b5c4ae9c1f88341252f2c22939 Mon Sep 17 00:00:00 2001 From: sowgro Date: Thu, 13 Nov 2025 20:05:25 -0500 Subject: export almost working --- .../userinput/menus/ImportExportMenu.java | 58 +++++++++++----------- .../controller/userinput/menus/MainMenu.java | 3 +- .../controller/userinput/menus/UserSettings.java | 3 -- 3 files changed, 31 insertions(+), 33 deletions(-) (limited to 'src/main/java/design/controller/userinput') diff --git a/src/main/java/design/controller/userinput/menus/ImportExportMenu.java b/src/main/java/design/controller/userinput/menus/ImportExportMenu.java index dbad0e3..dda465f 100644 --- a/src/main/java/design/controller/userinput/menus/ImportExportMenu.java +++ b/src/main/java/design/controller/userinput/menus/ImportExportMenu.java @@ -2,22 +2,18 @@ package design.controller.userinput.menus; import design.controller.userinput.Menu; import design.controller.userinput.MenuOption; -import design.persistence.JSONHandler; -import design.persistence.XMLHandler; +import design.persistence.*; +import design.persistence.importexport.DataHandler; +import design.persistence.importexport.DataSource; +import design.persistence.importexport.JSONHandler; +import design.persistence.importexport.XMLHandler; import java.io.File; import java.io.IOException; import java.util.List; -import java.util.Map; import java.util.Scanner; -import design.model.DataHandler; - public class ImportExportMenu extends Menu { - private static final Map handlers = Map.of( - "xml", new XMLHandler(), - "json", new JSONHandler() - ); @Override public String getTitle() { @@ -31,46 +27,50 @@ public class ImportExportMenu extends Menu { opts.add(new MenuOption("return to main menu", () -> new MainMenu().present())); - 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))); + opts.add(new MenuOption("import leagues...", () -> promptForPath(true, false))); + opts.add(new MenuOption("export leagues...", () -> promptForPath(false, false))); + opts.add(new MenuOption("import profiles...", () -> promptForPath(true, true))); + opts.add(new MenuOption("export profiles...", () -> promptForPath(false, true))); return opts; } private void promptForPath(boolean isImporting, boolean isPersonalProfile) { - System.out.println("Enter file path: "); + System.out.print("Enter file path: "); Scanner sc = new Scanner(System.in); String filePath = sc.nextLine(); File file = new File(filePath); - String ext = getExtension(filePath); - DataHandler handler = handlers.get(ext); + DataSource source; + if (isPersonalProfile) { + source = PersonalDatabase.instance(); + } else { + source = LeagueDatabase.instance(); + } - if (handler == null) { - System.out.println("Unsupported file type: " + ext); - return; + DataHandler handler; + String ext = getExtension(filePath); + switch (ext) { + case "json" -> handler = new JSONHandler(source); + case "xml" -> handler = new XMLHandler(source); + default -> { + System.out.println("Unsupported file type: " + ext); + return; + } } try { if (isImporting) { - if (isPersonalProfile) - handler.importPersonalData(file); - else - handler.importLeagueData(file); + handler.importData(file); } else { - if (isPersonalProfile) - handler.exportPersonalData(file); - else - handler.exportLeagueData(file); + handler.exportData(file); } } catch (IOException e) { - System.err.println("I/O error: " + e.getMessage()); + throw new RuntimeException(e); } - new ImportExportMenu().present(); + this.present(); } private static String getExtension(String fileName) { diff --git a/src/main/java/design/controller/userinput/menus/MainMenu.java b/src/main/java/design/controller/userinput/menus/MainMenu.java index 7522ceb..9d5204f 100644 --- a/src/main/java/design/controller/userinput/menus/MainMenu.java +++ b/src/main/java/design/controller/userinput/menus/MainMenu.java @@ -19,7 +19,8 @@ public class MainMenu extends Menu { new MenuOption("manage courses...", () -> new ManageCourses().present()), new MenuOption("manage clubs...", () -> new ManageClubs().present()), new MenuOption("statistics...", () -> new StatisticsMenu().present()), - new MenuOption("log round...", () -> new HolePlayMenu().present()) + new MenuOption("log round...", () -> new HolePlayMenu().present()), + new MenuOption("manage data...", () -> new ImportExportMenu().present()) ); } } diff --git a/src/main/java/design/controller/userinput/menus/UserSettings.java b/src/main/java/design/controller/userinput/menus/UserSettings.java index 865b00d..47b0a5b 100644 --- a/src/main/java/design/controller/userinput/menus/UserSettings.java +++ b/src/main/java/design/controller/userinput/menus/UserSettings.java @@ -60,9 +60,6 @@ public class UserSettings extends Menu { this.present(); })); - opts.add(new MenuOption("manage data...", () -> new ImportExportMenu().present())); - - return opts; } } -- cgit v1.2.3 From 73cb1c77c99330360313bb07fcbc3c23a2516680 Mon Sep 17 00:00:00 2001 From: sowgro Date: Sat, 15 Nov 2025 23:27:40 -0500 Subject: fix nulls --- src/main/java/design/controller/userinput/menus/ImportExportMenu.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/main/java/design/controller/userinput') diff --git a/src/main/java/design/controller/userinput/menus/ImportExportMenu.java b/src/main/java/design/controller/userinput/menus/ImportExportMenu.java index dda465f..21ffa6c 100644 --- a/src/main/java/design/controller/userinput/menus/ImportExportMenu.java +++ b/src/main/java/design/controller/userinput/menus/ImportExportMenu.java @@ -56,6 +56,7 @@ public class ImportExportMenu extends Menu { case "xml" -> handler = new XMLHandler(source); default -> { System.out.println("Unsupported file type: " + ext); + this.present(); return; } } @@ -75,6 +76,6 @@ public class ImportExportMenu extends Menu { private static String getExtension(String fileName) { int i = fileName.lastIndexOf('.'); - return (i >= 0) ? fileName.substring(i + 1).toLowerCase() : ""; + return (i >= 0) ? fileName.substring(i + 1).toLowerCase() : "unknown"; } } -- cgit v1.2.3