diff --git a/FormMapWithSetArtilleries.java b/FormMapWithSetArtilleries.java index 5112f61..16f6b4c 100644 --- a/FormMapWithSetArtilleries.java +++ b/FormMapWithSetArtilleries.java @@ -97,6 +97,43 @@ public class FormMapWithSetArtilleries extends JFrame { }); fileMenu.add(loadMenuItem); + JMenuItem saveMapMenuItem = new JMenuItem("Сохранить карту"); + saveMapMenuItem.addActionListener(e -> { + JFileChooser dialog = new JFileChooser(); + dialog.setFileFilter(new FileNameExtensionFilter("TXT file", "txt")); + dialog.showSaveDialog(this); + + try { + if (_mapsCollection.saveMap(Optional.ofNullable(listBoxMaps.getSelectedValue()).orElse(""), dialog.getSelectedFile().getAbsolutePath())) { + JOptionPane.showMessageDialog(this, "Сохранение прошло успешно", "Успех", JOptionPane.INFORMATION_MESSAGE); + } else { + JOptionPane.showMessageDialog(this, "Не сохранилось", "Провал", JOptionPane.INFORMATION_MESSAGE); + } + } catch (IOException ex) { + ex.printStackTrace(); + } + }); + fileMenu.add(saveMapMenuItem); + + JMenuItem loadMapMenuItem = new JMenuItem("Загрузить карту"); + loadMapMenuItem.addActionListener(e -> { + JFileChooser dialog = new JFileChooser(); + dialog.setFileFilter(new FileNameExtensionFilter("TXT file", "txt")); + dialog.showOpenDialog(this); + + try { + if (_mapsCollection.loadMap(dialog.getSelectedFile().getAbsolutePath())) { + reloadMaps(); + JOptionPane.showMessageDialog(this, "Загрузка прошла успешно", "Успех", JOptionPane.INFORMATION_MESSAGE); + } else { + JOptionPane.showMessageDialog(this, "Не загрузилось", "Провал", JOptionPane.INFORMATION_MESSAGE); + } + } catch (IOException ex) { + ex.printStackTrace(); + } + }); + fileMenu.add(loadMapMenuItem); + setJMenuBar(menuBar); comboBoxMapSelector.removeAllItems(); diff --git a/MapWithSetArtilleriesGeneric.java b/MapWithSetArtilleriesGeneric.java index c00e5d6..85c4474 100644 --- a/MapWithSetArtilleriesGeneric.java +++ b/MapWithSetArtilleriesGeneric.java @@ -19,6 +19,10 @@ public class MapWithSetArtilleriesGeneric map = _mapsStorage.getOrDefault(mapName, null); + + if (map == null) { + return false; + } + + try (PrintWriter writer = new PrintWriter(file)) { + writer.println("Map"); + writer.println(mapName); + writer.println(map.getMap().getClass().getSimpleName()); + + for (var artillery : map._setArtilleries.getArtilleries()) { + writer.println(artillery.getInfo()); + } + } + + return true; + } + + public boolean loadMap(String filename) throws IOException { + File file = new File(filename); + + if (!file.exists()) { + return false; + } + + try (BufferedReader reader = new BufferedReader(new FileReader(file))) { + String currentLine = reader.readLine(); + + if (currentLine == null || !currentLine.contains("Map")) { + return false; + } + + String mapName = reader.readLine(); + + MapWithSetArtilleriesGeneric map; + if (_mapsStorage.containsKey(mapName)) { + map = _mapsStorage.get(mapName); + if (!map.getMap().getClass().getSimpleName().equals(reader.readLine())) { + return false; + } + } else { + map = switch (reader.readLine()) { + case "SimpleMap" -> new MapWithSetArtilleriesGeneric<>(_pictureWidth, _pictureHeight, new SimpleMap()); + case "ForestMap" -> new MapWithSetArtilleriesGeneric<>(_pictureWidth, _pictureHeight, new ForestMap()); + default -> null; + }; + } + + map._setArtilleries.clear(); + + while ((currentLine = reader.readLine()) != null) { + map._setArtilleries.insert(DrawingObjectArtillery.create(currentLine)); + } + + _mapsStorage.put(mapName, map); + } + + return true; + } } diff --git a/SetArtilleriesGeneric.java b/SetArtilleriesGeneric.java index 7b8c6d0..0293a7b 100644 --- a/SetArtilleriesGeneric.java +++ b/SetArtilleriesGeneric.java @@ -53,4 +53,8 @@ public class SetArtilleriesGeneric { public Iterable getArtilleries() { return () -> _places.stream().filter(Objects::nonNull).iterator(); } + + public void clear() { + _places.clear(); + } }