package design.controller.userinput.menus; import design.controller.userinput.Menu; import design.controller.userinput.MenuOption; 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.Scanner; public class ImportExportMenu extends Menu { @Override public String getTitle() { return "import export menu"; } @Override public List getMenuOptions() { List opts = new java.util.ArrayList<>(); opts.add(new MenuOption("return to main menu", () -> new MainMenu().present())); 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.print("Enter file path: "); Scanner sc = new Scanner(System.in); String filePath = sc.nextLine(); File file = new File(filePath); DataSource source; if (isPersonalProfile) { source = PersonalDatabase.instance(); } else { source = LeagueDatabase.instance(); } 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); this.present(); return; } } try { if (isImporting) { handler.importData(file); } else { handler.exportData(file); } } catch (IOException e) { throw new RuntimeException(e); } this.present(); } private static String getExtension(String fileName) { int i = fileName.lastIndexOf('.'); return (i >= 0) ? fileName.substring(i + 1).toLowerCase() : "unknown"; } }