diff --git a/MapWithSetLocomotivesGeneric.java b/MapWithSetLocomotivesGeneric.java index e7d3c43..c0ad0b7 100644 --- a/MapWithSetLocomotivesGeneric.java +++ b/MapWithSetLocomotivesGeneric.java @@ -1,5 +1,8 @@ import java.awt.*; import java.awt.image.BufferedImage; +import java.lang.reflect.Array; +import java.util.Arrays; +import java.util.Collections; import java.util.LinkedList; public class MapWithSetLocomotivesGeneric @@ -189,6 +192,7 @@ public class MapWithSetLocomotivesGeneric /// Загрузка списка из массива строк public void LoadData(String[] records) { + Collections.reverse(Arrays.asList(records)); for (var rec : records) { _setLocomotives.Insert((T)DrawningObjectLocomotive.Create(rec)); diff --git a/MapsCollection.java b/MapsCollection.java index 4aae1fa..2077e27 100644 --- a/MapsCollection.java +++ b/MapsCollection.java @@ -1,9 +1,10 @@ +import java.io.*; import java.util.ArrayList; import java.util.HashMap; public class MapsCollection { /// Словарь (хранилище) с картами - final HashMap> _mapStorages; + final HashMap> _mapStorages; /// Возвращение списка названий карт public ArrayList keys() { @@ -13,10 +14,13 @@ public class MapsCollection { private final int _pictureWidth; /// Высота окна отрисовки private final int _pictureHeight; + // Сепараторы + private final char separatorDict = '|'; + private final char separatorData = ';'; /// Конструктор public MapsCollection(int pictureWidth, int pictureHeight) { - _mapStorages = new HashMap>(); + _mapStorages = new HashMap>(); _pictureWidth = pictureWidth; _pictureHeight = pictureHeight; } @@ -24,7 +28,7 @@ public class MapsCollection { public void AddMap(String name, AbstractMap map) { // Логика для добавления - if (!_mapStorages.containsKey(name)) _mapStorages.put(name, new MapWithSetLocomotivesGeneric(_pictureWidth, _pictureHeight, map)); + if (!_mapStorages.containsKey(name)) _mapStorages.put(name, new MapWithSetLocomotivesGeneric(_pictureWidth, _pictureHeight, map)); } /// Удаление карты public void DelMap(String name) @@ -33,15 +37,79 @@ public class MapsCollection { if (_mapStorages.containsKey(name)) _mapStorages.remove(name); } /// Доступ к парковке - public MapWithSetLocomotivesGeneric Get(String ind) + public MapWithSetLocomotivesGeneric Get(String ind) { // Логика получения объекта if (_mapStorages.containsKey(ind)) return _mapStorages.get(ind); return null; } // Доп.индексатор из задания - public DrawningObjectLocomotive Get (String name, int position) { + public IDrawningObject Get (String name, int position) { if (_mapStorages.containsKey(name)) return _mapStorages.get(name)._setLocomotives.Get(position); else return null; } + + /// Сохранение информации по локомотивам в хранилище в файл + public boolean SaveData(String filename) + { + File file = new File(filename); + if (file.exists()) + { + file.delete(); + } + try(BufferedWriter bw = new BufferedWriter(new FileWriter(filename))) { + bw.write("MapsCollection\n"); + for (var storage : _mapStorages.entrySet()) { + bw.write("" + storage.getKey() + separatorDict + storage.getValue().GetData(separatorDict, separatorData) + "\n"); + } + } + catch (IOException ex) { + System.out.println(ex.getMessage()); + } + return true; + } + + /// Загрузка информации по локомотивам в депо из файла + public boolean LoadData(String filename) + { + File file = new File(filename); + if (!file.exists()) + { + return false; + } + try { + BufferedReader br = new BufferedReader(new FileReader(filename)); + String curLine = br.readLine(); + if (!curLine.contains("MapsCollection")) { + return false; + } + + _mapStorages.clear(); + while ((curLine = br.readLine()) != null) { + var elems = curLine.split(Character.toString(separatorDict)); + AbstractMap map = null; + + switch (elems[1]) + { //TODO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + case "SimpleMap": + map = new SimpleMap(); + break; + case "SpikeMap": + map = new SpikeMap(); + break; + case "RailMap": + map = new RailMap(); + break; + } + + _mapStorages.put(elems[0], new MapWithSetLocomotivesGeneric(_pictureWidth, _pictureHeight, map)); + _mapStorages.get(elems[0]).LoadData(elems[2].split(Character.toString(separatorData))); + } + } catch (IOException ex) { + System.out.println(ex.getMessage()); + } + return true; + } + + }