import java.awt.image.BufferedImage; import java.io.*; import java.util.*; import java.util.stream.Collectors; public class CarsGenericStorage { final HashMap> _carStorages; public ArrayList Keys() { return new ArrayList<>(_carStorages.keySet()); } private final int _pictureWidth; private final int _pictureHeight; private static String _separatorForKeyValueWR = "|"; private static String _separatorForKeyValue = "\\|"; private static String _separatorForObjectWR = ":"; private static String _separatorForObject = "\\:"; private String _separatorRecordsWR = ";"; private String _separatorRecords = "\\;"; public CarsGenericStorage(int pictureWidth, int pictureHeight) { _pictureHeight = pictureHeight; _pictureWidth = pictureWidth; _carStorages = new HashMap<>(); } public boolean SaveDataSingle(String filename, String key) { if (new File(filename).exists()) { new File(filename).delete(); } StringBuilder data = new StringBuilder(); data.append(key).append("\n"); if (_carStorages.get(key) == null) return false; if (_carStorages.get(key).getTanker(100) == null) return false; for (DrawTanker elem : _carStorages.get(key).getTanker(100)) { data.append(elem != null ? ExtentionDrawingTanker.GetDataForSave(elem, _separatorForObjectWR) + "\n" : ""); } if (data.length() == 0) return false; try (BufferedWriter writer = new BufferedWriter(new FileWriter(filename))) { writer.write("TankerStorage" + System.lineSeparator() + data.toString()); } catch (IOException e) { e.printStackTrace(); return false; } return true; } public boolean LoadDataSingle(String filename){ if (!new File(filename).exists()) { return false; } try (BufferedReader reader = new BufferedReader(new FileReader(filename))) { String s = reader.readLine(); if (s == null || s.length() == 0) return false; if (!s.startsWith("TankerStorage")) return false; String key = reader.readLine(); if (key == null || key.length() == 0) return false; CarsGenericCollection collection; if (_carStorages.containsKey(key)){ collection = _carStorages.get(key); collection.clear(); } else collection = new CarsGenericCollection<>(_pictureWidth, _pictureHeight); List tankerString = new ArrayList(); s = reader.readLine(); while (s != null && s.length() != 0){ tankerString.add(s); s = reader.readLine(); } Collections.reverse(tankerString); for (String elem : tankerString) { DrawTanker tanker = ExtentionDrawingTanker.CreateDrawingTanker(elem, _separatorForObject, _pictureWidth, _pictureHeight); if (tanker == null || collection.plus(tanker) == -1) return false; } _carStorages.put(key, collection); } catch (IOException e) { e.printStackTrace(); return false; } return true; } public boolean SaveData(String filename) { if (new File(filename).exists()) { new File(filename).delete(); } StringBuilder data = new StringBuilder(); for (Map.Entry> record : _carStorages.entrySet()) { StringBuilder records = new StringBuilder(); for (DrawTanker elem : record.getValue().getTanker(100)) { records.append(elem != null ? ExtentionDrawingTanker.GetDataForSave(elem, _separatorForObjectWR) + _separatorRecordsWR : ""); } data.append(record.getKey()).append(_separatorForKeyValueWR).append(records).append("\n"); } if (data.length() == 0) return false; try (BufferedWriter writer = new BufferedWriter(new FileWriter(filename))) { writer.write("TrainStorage" + System.lineSeparator() + data.toString()); } catch (IOException e) { e.printStackTrace(); return false; } return true; } public boolean LoadData(String filename) { if (!new File(filename).exists()) { return false; } try (BufferedReader reader = new BufferedReader(new FileReader(filename))) { String s = reader.readLine(); if (s == null || s.length() == 0) return false; if (!s.startsWith("TrainStorage")) return false; _carStorages.clear(); s = reader.readLine(); while (s != null && s.length() != 0) { String[] record = s.split(_separatorForKeyValue); s = reader.readLine(); if (record.length != 2) { continue; } CarsGenericCollection collection = new CarsGenericCollection<>(_pictureWidth, _pictureHeight); String[] set = record[1].split(_separatorRecords); List reversedSet = Arrays.asList(set); Collections.reverse(reversedSet); for (String elem : reversedSet) { DrawTanker train = ExtentionDrawingTanker.CreateDrawingTanker(elem, _separatorForObject, _pictureWidth, _pictureHeight); if (train == null || collection.plus(train) == -1) return false; } _carStorages.put(record[0], collection); } } catch (IOException e) { e.printStackTrace(); return false; } return true; } public void AddSet(String name) { if (Keys().contains(name)) return; _carStorages.put(name, new CarsGenericCollection<>(_pictureWidth, _pictureHeight)); } public void DelSet(String name) { if (!Keys().contains(name)) return; _carStorages.remove(name); } public CarsGenericCollection get(String ind) { if (Keys().contains(ind)) return _carStorages.get(ind); return null; } public DrawingObjectTanker get(String name, int ind) { if (!Keys().contains(name)) return null; return _carStorages.get(name).GetU(ind); } }