Лабораторная работа 6
This commit is contained in:
parent
8c23720f0f
commit
057e5a46e0
@ -1,4 +1,3 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_20" default="true" project-jdk-name="19" project-jdk-type="JavaSDK">
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_20" default="true" project-jdk-name="19" project-jdk-type="JavaSDK">
|
||||||
<output url="file://$PROJECT_DIR$/out" />
|
<output url="file://$PROJECT_DIR$/out" />
|
||||||
|
77
Tank/src/ExtentionDrawingTank.java
Normal file
77
Tank/src/ExtentionDrawingTank.java
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
import java.awt.Color;
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Vector;
|
||||||
|
|
||||||
|
public class ExtentionDrawingTank {
|
||||||
|
// Создание объекта из строки
|
||||||
|
public static DrawingArmoVehicle CreateDrawingTank(String info, String separatorForObject, int width, int height) {
|
||||||
|
String[] strs = info.split(separatorForObject);
|
||||||
|
if (strs.length == 5)
|
||||||
|
{
|
||||||
|
String[] colorValues = strs[2].split(",");
|
||||||
|
|
||||||
|
DrawingArmoVehicle drawingVehicle = new DrawingArmoVehicle(Integer.parseInt(strs[0]), (double)Integer.parseInt(strs[1]),
|
||||||
|
new Color(Integer.parseInt(colorValues[0].replaceAll("\\D", "")),
|
||||||
|
Integer.parseInt(colorValues[1].replaceAll("\\D", "")),
|
||||||
|
Integer.parseInt(colorValues[2].replaceAll("\\D", ""))),
|
||||||
|
Integer.parseInt(strs[3]),
|
||||||
|
width, height
|
||||||
|
);
|
||||||
|
|
||||||
|
try{
|
||||||
|
drawingVehicle.OrnamentsForm = (IOrnamentForm) Class.forName(strs[4]).getDeclaredConstructor().newInstance();
|
||||||
|
drawingVehicle.OrnamentsForm.setDigit(drawingVehicle.ArmoVehicle.numWheel);
|
||||||
|
} catch (Exception e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return drawingVehicle;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(strs.length == 9) {
|
||||||
|
String[] colorValues = strs[2].split(",");
|
||||||
|
String[] colorValues2 = strs[5].split(",");
|
||||||
|
DrawingTank drawingTank = new DrawingTank(
|
||||||
|
Integer.parseInt(strs[0]),
|
||||||
|
(float)Integer.parseInt(strs[1]),
|
||||||
|
new Color(
|
||||||
|
Integer.parseInt(colorValues[0].replaceAll("\\D", "")),
|
||||||
|
Integer.parseInt(colorValues[1].replaceAll("\\D", "")),
|
||||||
|
Integer.parseInt(colorValues[2].replaceAll("\\D", ""))
|
||||||
|
),
|
||||||
|
Integer.parseInt(strs[3]),
|
||||||
|
new Color(
|
||||||
|
Integer.parseInt(colorValues2[0].replaceAll("\\D", "")),
|
||||||
|
Integer.parseInt(colorValues2[1].replaceAll("\\D", "")),
|
||||||
|
Integer.parseInt(colorValues2[2].replaceAll("\\D", ""))
|
||||||
|
),
|
||||||
|
strs[6].equals("true"),
|
||||||
|
strs[7].equals("true"),
|
||||||
|
strs[8].equals("true"),
|
||||||
|
width, height
|
||||||
|
);
|
||||||
|
try {
|
||||||
|
drawingTank.OrnamentsForm = (IOrnamentForm)Class.forName(strs[4]).getDeclaredConstructor().newInstance();
|
||||||
|
drawingTank.OrnamentsForm.setDigit(drawingTank.ArmoVehicle.numWheel);
|
||||||
|
} catch (Exception e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return drawingTank;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Получение данных для сохранения в файл
|
||||||
|
public static String GetDataForSave(DrawingArmoVehicle drawingArmoVehicle, String separatorForObject) {
|
||||||
|
EntityArmoVehicle vehicle = drawingArmoVehicle.ArmoVehicle;
|
||||||
|
if (vehicle == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
String str = "" + vehicle.Speed + separatorForObject + (int)vehicle.Weight + separatorForObject + vehicle.BodyColor + separatorForObject + vehicle.numWheel + separatorForObject + drawingArmoVehicle.OrnamentsForm.getClass().getName();
|
||||||
|
if (!(vehicle instanceof EntityTank)) {
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
return str+separatorForObject+((EntityTank)vehicle).AdditionalColor.toString()+separatorForObject+((EntityTank)vehicle).BodyKit+separatorForObject+((EntityTank)vehicle).Caterpillar+separatorForObject+((EntityTank)vehicle).Tower;
|
||||||
|
}
|
||||||
|
}
|
@ -4,10 +4,17 @@ import javax.swing.event.ListSelectionListener;
|
|||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
import java.awt.event.ActionListener;
|
import java.awt.event.ActionListener;
|
||||||
|
import java.io.File;
|
||||||
|
import javax.swing.JMenu;
|
||||||
|
import javax.swing.JMenuBar;
|
||||||
|
import javax.swing.JMenuItem;
|
||||||
|
import javax.swing.JFileChooser;
|
||||||
|
import javax.swing.filechooser.FileNameExtensionFilter;
|
||||||
|
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.Queue;
|
import java.util.Queue;
|
||||||
|
|
||||||
|
|
||||||
public class FormTankCollection {
|
public class FormTankCollection {
|
||||||
private class Canvas extends JComponent {
|
private class Canvas extends JComponent {
|
||||||
public Canvas() {
|
public Canvas() {
|
||||||
@ -158,8 +165,8 @@ public class FormTankCollection {
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
JButton toFormTankGenerate = new JButton("Генерировать технику");
|
JButton FormTankGenerate = new JButton("Генерация");
|
||||||
toFormTankGenerate.addActionListener(
|
FormTankGenerate.addActionListener(
|
||||||
new ActionListener() {
|
new ActionListener() {
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
FormTankGenerate formTankGenerate = new FormTankGenerate();
|
FormTankGenerate formTankGenerate = new FormTankGenerate();
|
||||||
@ -206,29 +213,144 @@ public class FormTankCollection {
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Создаём панель меню
|
||||||
|
JMenuBar menuBar = new JMenuBar();
|
||||||
|
|
||||||
|
// Создаём пункты меню
|
||||||
|
JMenu fileMenu = new JMenu("File");
|
||||||
|
|
||||||
|
// Создаём пункты меню
|
||||||
|
JMenuItem openItem = new JMenuItem("Открыть");
|
||||||
|
openItem.addActionListener(
|
||||||
|
new ActionListener() {
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
JFileChooser fileChooser = new JFileChooser();
|
||||||
|
|
||||||
|
fileChooser.setDialogTitle("Выберите файл для загрузки данных");
|
||||||
|
|
||||||
|
// Установка фильтра для файлов с определённым расширеним (например, txt)
|
||||||
|
fileChooser.setFileFilter(new FileNameExtensionFilter("Текстовые файлы (*.txt)", "txt"));
|
||||||
|
|
||||||
|
fileChooser.setDialogTitle("Выберите файл для загрузки данных");
|
||||||
|
if (fileChooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
|
||||||
|
File selectedFile = fileChooser.getSelectedFile();
|
||||||
|
if (_storage.LoadData(selectedFile.getAbsolutePath())) {
|
||||||
|
JOptionPane.showMessageDialog(null, "Загрузка прошла успешно", "Результат", JOptionPane.INFORMATION_MESSAGE);
|
||||||
|
} else {
|
||||||
|
JOptionPane.showMessageDialog(null, "Не загрузилось", "Результат", JOptionPane.ERROR_MESSAGE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ReloadObjects();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
JMenuItem saveItem = new JMenuItem("Сохранить");
|
||||||
|
saveItem.addActionListener(
|
||||||
|
new ActionListener() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
JFileChooser fileChooser = new JFileChooser();
|
||||||
|
fileChooser.setDialogTitle("Выберите файл для сохранения данных");
|
||||||
|
|
||||||
|
// Установка фильтра для файлов с определённым расширением (например, txt)
|
||||||
|
fileChooser.setFileFilter(new FileNameExtensionFilter("Текстовые файлы (*.txt)", "txt"));
|
||||||
|
|
||||||
|
if (fileChooser.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) {
|
||||||
|
File selectedFile = fileChooser.getSelectedFile();
|
||||||
|
if(_storage.SaveData(selectedFile.getAbsolutePath()))
|
||||||
|
JOptionPane.showMessageDialog(null, "Сохранение прошло успешно", "Результат", JOptionPane.INFORMATION_MESSAGE);
|
||||||
|
else
|
||||||
|
JOptionPane.showMessageDialog(null, "Не сохранилось", "Результат", JOptionPane.ERROR_MESSAGE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
JMenuItem openItemSingle = new JMenuItem("Открыть одиночный");
|
||||||
|
openItemSingle.addActionListener(
|
||||||
|
new ActionListener() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
JFileChooser fileChooser = new JFileChooser();
|
||||||
|
|
||||||
|
fileChooser.setDialogTitle("Выберите файл для загрузки данных");
|
||||||
|
|
||||||
|
//Установка фильтра для файлов с определённым расширением (например, txt)
|
||||||
|
fileChooser.setFileFilter(new FileNameExtensionFilter("Текстовые файлы (*.txt)", "txt"));
|
||||||
|
|
||||||
|
fileChooser.setDialogTitle("Выберите файл для загрузки данных");
|
||||||
|
if (fileChooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
|
||||||
|
File selectedFile = fileChooser.getSelectedFile();
|
||||||
|
|
||||||
|
if (_storage.LoadDataSingle(selectedFile.getAbsolutePath())) {
|
||||||
|
JOptionPane.showMessageDialog(null, "Загрузка прошла успешно", "Результат", JOptionPane.INFORMATION_MESSAGE);
|
||||||
|
} else {
|
||||||
|
JOptionPane.showMessageDialog(null, "Не загрузилось", "Результат", JOptionPane.ERROR_MESSAGE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ReloadObjects();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
JMenuItem saveItemSingle = new JMenuItem("Сохранение одиночного");
|
||||||
|
saveItemSingle.addActionListener(
|
||||||
|
new ActionListener() {
|
||||||
|
public void actionPerformed(ActionEvent e){
|
||||||
|
if (jListStorage.getSelectedValue() == null){
|
||||||
|
JOptionPane.showMessageDialog(null, "Не выбран гараж", "Ошибка", JOptionPane.ERROR_MESSAGE);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
JFileChooser fileChooser = new JFileChooser();
|
||||||
|
fileChooser.setDialogTitle("Выберите файл для сохранения данных");
|
||||||
|
|
||||||
|
// Установка фильтра для файлов с определенным расширением (например, .txt)
|
||||||
|
fileChooser.setFileFilter(new FileNameExtensionFilter("Текстовые файлы (*.txt)", "txt"));
|
||||||
|
|
||||||
|
if (fileChooser.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) {
|
||||||
|
File selectedFile = fileChooser.getSelectedFile();
|
||||||
|
if (_storage.SaveDataSingle(selectedFile.getAbsolutePath(), jListStorage.getSelectedValue()))
|
||||||
|
JOptionPane.showMessageDialog(null, "Сохранение прошло успешно", "Результат", JOptionPane.INFORMATION_MESSAGE);
|
||||||
|
else
|
||||||
|
JOptionPane.showMessageDialog(null, "Не сохранилось", "Результат", JOptionPane.ERROR_MESSAGE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
// Добавляем пункты в меню
|
||||||
|
fileMenu.add(openItem);
|
||||||
|
fileMenu.add(saveItem);
|
||||||
|
fileMenu.add(openItemSingle);
|
||||||
|
fileMenu.add(saveItemSingle);
|
||||||
|
|
||||||
|
// Добавляем меню в панель меню
|
||||||
|
menuBar.add(fileMenu);
|
||||||
|
|
||||||
Frame.setSize(880, 520);
|
Frame.setSize(880, 520);
|
||||||
Frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
Frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||||
Frame.setLayout(null);
|
Frame.setLayout(null);
|
||||||
canv.setBounds(0, 0, pictureBoxWidth, pictureBoxHeight);
|
canv.setBounds(0, 0, pictureBoxWidth, pictureBoxHeight);
|
||||||
ButtonAddVehicle.setBounds(pictureBoxWidth - 10, 10, 170, 30);
|
ButtonAddVehicle.setBounds(pictureBoxWidth, 0, 160, 20);
|
||||||
TextBoxNumber.setBounds(pictureBoxWidth - 10, 50, 170, 30);
|
TextBoxNumber.setBounds(pictureBoxWidth, 30, 160, 20);
|
||||||
ButtonRemoveTank.setBounds(pictureBoxWidth - 10, 90, 170, 30);
|
ButtonRemoveTank.setBounds(pictureBoxWidth, 60, 160, 20);
|
||||||
ButtonRefreshCollection.setBounds(pictureBoxWidth - 10, 130, 170, 30);
|
ButtonRefreshCollection.setBounds(pictureBoxWidth, 90, 160, 20);
|
||||||
toFormTankGenerate.setBounds(pictureBoxWidth - 10, 170, 170, 30);
|
FormTankGenerate.setBounds(pictureBoxWidth, 120, 160, 20);
|
||||||
|
|
||||||
buttonAddSet.setBounds(pictureBoxWidth - 10, 210, 170, 20);
|
buttonAddSet.setBounds(pictureBoxWidth, 150, 160, 20);
|
||||||
textBoxSetName.setBounds(pictureBoxWidth - 10, 240, 170, 20);
|
textBoxSetName.setBounds(pictureBoxWidth, 180, 160, 20);
|
||||||
jListStorage.setBounds(pictureBoxWidth - 10, 270, 170, 80);
|
jListStorage.setBounds(pictureBoxWidth, 210, 160, 80);
|
||||||
buttonRemoveSet.setBounds(pictureBoxWidth - 10, 360, 170, 20);
|
buttonRemoveSet.setBounds(pictureBoxWidth, 300, 160, 20);
|
||||||
|
menuBar.setBounds(pictureBoxWidth, 360, 160, 20);
|
||||||
|
|
||||||
buttonGetRemoved.setBounds(pictureBoxWidth - 10, 390, 170, 20);
|
buttonGetRemoved.setBounds(pictureBoxWidth, 330, 160, 20);
|
||||||
|
|
||||||
Frame.add(canv);
|
Frame.add(canv);
|
||||||
Frame.add(ButtonAddVehicle);
|
Frame.add(ButtonAddVehicle);
|
||||||
Frame.add(ButtonRemoveTank);
|
Frame.add(ButtonRemoveTank);
|
||||||
Frame.add(ButtonRefreshCollection);
|
Frame.add(ButtonRefreshCollection);
|
||||||
Frame.add(TextBoxNumber);
|
Frame.add(TextBoxNumber);
|
||||||
Frame.add(toFormTankGenerate);
|
Frame.add(FormTankGenerate);
|
||||||
|
|
||||||
Frame.add(buttonAddSet);
|
Frame.add(buttonAddSet);
|
||||||
Frame.add(textBoxSetName);
|
Frame.add(textBoxSetName);
|
||||||
@ -236,6 +358,7 @@ public class FormTankCollection {
|
|||||||
Frame.add(buttonRemoveSet);
|
Frame.add(buttonRemoveSet);
|
||||||
|
|
||||||
Frame.add(buttonGetRemoved);
|
Frame.add(buttonGetRemoved);
|
||||||
|
Frame.add(menuBar);
|
||||||
|
|
||||||
Frame.setVisible(true);
|
Frame.setVisible(true);
|
||||||
}
|
}
|
||||||
|
@ -86,4 +86,5 @@ public class SetGeneric <T extends Object> {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
public void clear() { _places.clear(); }
|
||||||
}
|
}
|
@ -14,6 +14,11 @@ public class TanksGenericCollections<T extends DrawingArmoVehicle, U extends IMo
|
|||||||
// Набор объектов
|
// Набор объектов
|
||||||
private SetGeneric<T> _collection;
|
private SetGeneric<T> _collection;
|
||||||
|
|
||||||
|
// Получение объектов коллекции
|
||||||
|
public Iterable<T> getTanks(final Integer maxTanks) { return _collection.GetTanks(maxTanks); }
|
||||||
|
|
||||||
|
public void clear() { _collection.clear(); }
|
||||||
|
|
||||||
// Конструктор
|
// Конструктор
|
||||||
public TanksGenericCollections(int pictureWidth, int pictureHeight) {
|
public TanksGenericCollections(int pictureWidth, int pictureHeight) {
|
||||||
int width = pictureWidth / _placeSizeWidth;
|
int width = pictureWidth / _placeSizeWidth;
|
||||||
|
@ -1,7 +1,171 @@
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.BufferedWriter;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileReader;
|
||||||
|
import java.io.FileWriter;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
public class TanksGenericStorage {
|
public class TanksGenericStorage {
|
||||||
|
// Разделитель для записи ключа и значения элемента словаря
|
||||||
|
private static String _separatorForKeyValueWR = "|";
|
||||||
|
private static String _separatorForKeyValue = "\\|";
|
||||||
|
|
||||||
|
// Разделитель для записей коллекции данных в файл
|
||||||
|
private String _separatorRecordsWR = ";";
|
||||||
|
private String _separatorRecords = "\\;";
|
||||||
|
|
||||||
|
// Разделитель для записи информации по объекту в файл
|
||||||
|
private static String _separatorForObjectWR = ":";
|
||||||
|
private static String _separatorForObject = "\\:";
|
||||||
|
|
||||||
|
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");
|
||||||
|
for (DrawingArmoVehicle elem: _tankStorages.get(key).getTanks(100)) {
|
||||||
|
if(_tankStorages.get(key).getTanks(100) == null)
|
||||||
|
break;
|
||||||
|
data.append(elem != null ? ExtentionDrawingTank.GetDataForSave(elem, _separatorForObjectWR) + "\n" : "");
|
||||||
|
}
|
||||||
|
|
||||||
|
if(data.length() == 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
try (BufferedWriter writer = new BufferedWriter(new FileWriter(filename))) {
|
||||||
|
writer.write("TankStorageSingle" + System.lineSeparator() + data.toString());
|
||||||
|
} catch (Exception 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("TankStorageSingle"))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
String key = reader.readLine();
|
||||||
|
if(key == null || key.length() == 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
TanksGenericCollections<DrawingArmoVehicle, DrawingObjectTank> collections = new TanksGenericCollections<>(_pictureWidth, _pictureHeight);
|
||||||
|
if (_tankStorages.containsKey(key)){
|
||||||
|
collections = _tankStorages.get(key);
|
||||||
|
collections.clear();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
collections = new TanksGenericCollections<>(_pictureWidth, _pictureHeight);
|
||||||
|
|
||||||
|
List<String> tanksStrings = new ArrayList<String>();
|
||||||
|
|
||||||
|
s = reader.readLine();
|
||||||
|
while (s != null && s.length() != 0) {
|
||||||
|
tanksStrings.add(s);
|
||||||
|
s = reader.readLine();
|
||||||
|
}
|
||||||
|
|
||||||
|
Collections.reverse(tanksStrings);
|
||||||
|
for (String elem : tanksStrings) {
|
||||||
|
DrawingArmoVehicle vehicle = ExtentionDrawingTank.CreateDrawingTank(elem, _separatorForObject, _pictureWidth, _pictureHeight);
|
||||||
|
if(vehicle == null || collections.Add(vehicle) == -1)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(_tankStorages.containsKey(key))
|
||||||
|
_tankStorages.remove(key);
|
||||||
|
_tankStorages.put(key, collections);
|
||||||
|
} 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<String, TanksGenericCollections<DrawingArmoVehicle, DrawingObjectTank>> record : _tankStorages.entrySet()) {
|
||||||
|
StringBuilder records = new StringBuilder();
|
||||||
|
for (DrawingArmoVehicle elem : record.getValue().getTanks(100)) {
|
||||||
|
records.append(elem != null ? ExtentionDrawingTank.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("TankStorage" + 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("TankStorage"))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
_tankStorages.clear();
|
||||||
|
|
||||||
|
s = reader.readLine();
|
||||||
|
while (s != null && s.length() != 0) {
|
||||||
|
String[] record = s.split(_separatorForKeyValue);
|
||||||
|
s = reader.readLine();
|
||||||
|
if (record.length != 2) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
TanksGenericCollections<DrawingArmoVehicle, DrawingObjectTank> collection = new TanksGenericCollections<>(_pictureWidth, _pictureHeight);
|
||||||
|
String[] set = record[1].split(_separatorRecords);
|
||||||
|
List<String> reversedSet = Arrays.asList(set);
|
||||||
|
Collections.reverse(reversedSet);
|
||||||
|
for (String elem : reversedSet) {
|
||||||
|
DrawingArmoVehicle train = ExtentionDrawingTank.CreateDrawingTank(elem, _separatorForObject, _pictureWidth, _pictureHeight);
|
||||||
|
if (train == null || collection.Add(train) == -1)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
_tankStorages.put(record[0], collection);
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
// Словарь (как хранилище)
|
// Словарь (как хранилище)
|
||||||
HashMap<String, TanksGenericCollections<DrawingArmoVehicle, DrawingObjectTank>> _tankStorages;
|
HashMap<String, TanksGenericCollections<DrawingArmoVehicle, DrawingObjectTank>> _tankStorages;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user