diff --git a/laba1Loco/ExtentionDrawingTrain.java b/laba1Loco/ExtentionDrawingTrain.java
index 83bfaba..9fa5936 100644
--- a/laba1Loco/ExtentionDrawingTrain.java
+++ b/laba1Loco/ExtentionDrawingTrain.java
@@ -1,6 +1,7 @@
package laba1Loco;
import java.awt.Color;
+import java.lang.reflect.InvocationTargetException;
public class ExtentionDrawingTrain {
///
@@ -14,23 +15,32 @@ public class ExtentionDrawingTrain {
public static DrawingTrain CreateDrawingTrain(String info, String separatorForObject, int width, int height)
{
String[] strs = info.split(separatorForObject);
- if (strs.length == 4)
+ if (strs.length == 5)
{
String[] colorValues = strs[2].split(",");
- return new DrawingTrain(Integer.parseInt(strs[0]), (double)Integer.parseInt(strs[1]),
+ DrawingTrain drawingTrain = new DrawingTrain(Integer.parseInt(strs[0]), (double)Integer.parseInt(strs[1]),
new Color(
- Integer.parseInt(colorValues[0]),
- Integer.parseInt(colorValues[1]),
- Integer.parseInt(colorValues[2])
+ Integer.parseInt(colorValues[0].replaceAll("\\D", "")),
+ Integer.parseInt(colorValues[1].replaceAll("\\D", "")),
+ Integer.parseInt(colorValues[2].replaceAll("\\D", ""))
),
- Integer.parseInt(strs[3]), width, height);
+ Integer.parseInt(strs[3]),
+ width, height);
+ try{
+ drawingTrain.wheelDrawing = (IWheelDrawing)Class.forName(strs[4]).getDeclaredConstructor().newInstance();
+ drawingTrain.wheelDrawing.setNumWheel(drawingTrain.EntityTrain.numWheel);
+ }
+ catch(Exception e){
+ return null;
+ }
+ return drawingTrain;
}
- if (strs.length == 8)
+ if (strs.length == 9)
{
String[] colorValues = strs[2].split(",");
- String[] colorValues2 = strs[4].split(",");
- return new DrawingLoco(
+ String[] colorValues2 = strs[5].split(",");
+ DrawingLoco drawingLoco = new DrawingLoco(
Integer.parseInt(strs[0]),
(double)Integer.parseInt(strs[1]),
new Color(
@@ -44,10 +54,18 @@ public class ExtentionDrawingTrain {
Integer.parseInt(colorValues2[1].replaceAll("\\D", "")),
Integer.parseInt(colorValues2[2].replaceAll("\\D", ""))
),
- strs[5].equals("True"),
- strs[6].equals("True"),
- strs[7].equals("True"),
+ strs[6].equals("true"),
+ strs[7].equals("true"),
+ strs[8].equals("true"),
width, height);
+ try{
+ drawingLoco.wheelDrawing = (IWheelDrawing)Class.forName(strs[4]).getDeclaredConstructor().newInstance();
+ drawingLoco.wheelDrawing.setNumWheel(drawingLoco.EntityTrain.numWheel);
+ }
+ catch(Exception e){
+ return null;
+ }
+ return drawingLoco;
}
return null;
}
@@ -64,7 +82,7 @@ public class ExtentionDrawingTrain {
{
return null;
}
- String str = "" + train.Speed + separatorForObject + (int)train.Weight + separatorForObject + train.BodyColor + separatorForObject + train.numWheel;
+ String str = "" + train.Speed + separatorForObject + (int)train.Weight + separatorForObject + train.BodyColor + separatorForObject + train.numWheel + separatorForObject + drawningTrain.wheelDrawing.getClass().getName();
if (!(train instanceof EntityLoco))
{
return str;
diff --git a/laba1Loco/FormTrainCollecltion.java b/laba1Loco/FormTrainCollecltion.java
index 2c8350e..0e3fb34 100644
--- a/laba1Loco/FormTrainCollecltion.java
+++ b/laba1Loco/FormTrainCollecltion.java
@@ -270,7 +270,7 @@ public class FormTrainCollecltion {
fileChooser.setDialogTitle("Выберите файл для загрузки данных");
if (fileChooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
File selectedFile = fileChooser.getSelectedFile();
- if (_storage.loadData(selectedFile.getAbsolutePath())) {
+ if (_storage.LoadData(selectedFile.getAbsolutePath())) {
JOptionPane.showMessageDialog(null, "Загрузка прошла успешно", "Результат", JOptionPane.INFORMATION_MESSAGE);
} else {
JOptionPane.showMessageDialog(null, "Не загрузилось", "Результат", JOptionPane.ERROR_MESSAGE);
@@ -300,10 +300,61 @@ public class FormTrainCollecltion {
}
}
);
+ JMenuItem openItemSingle = new JMenuItem("Open single");
+ openItemSingle.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.LoadDataSingle(selectedFile.getAbsolutePath())) {
+ JOptionPane.showMessageDialog(null, "Загрузка прошла успешно", "Результат", JOptionPane.INFORMATION_MESSAGE);
+ } else {
+ JOptionPane.showMessageDialog(null, "Не загрузилось", "Результат", JOptionPane.ERROR_MESSAGE);
+ }
+ }
+ ReloadObjects();
+ }
+ }
+ );
+ JMenuItem saveItemSingle = new JMenuItem("Save single");
+ 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);
diff --git a/laba1Loco/TrainsGenericStorage.java b/laba1Loco/TrainsGenericStorage.java
index b38d5a4..36442cf 100644
--- a/laba1Loco/TrainsGenericStorage.java
+++ b/laba1Loco/TrainsGenericStorage.java
@@ -6,6 +6,7 @@ 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.Collections;
import java.util.HashMap;
@@ -30,6 +31,73 @@ public class TrainsGenericStorage {
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 (DrawingTrain elem : _trainStorages.get(key).getTrains(100))
+ data.append(elem != null ? ExtentionDrawingTrain.GetDataForSave(elem, _separatorForObjectWR) + "\n" : "");
+
+ if (data.length() == 0)
+ return false;
+
+ try (BufferedWriter writer = new BufferedWriter(new FileWriter(filename))) {
+ writer.write("TrainStorageSingle" + 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("TrainStorageSingle"))
+ return false;
+
+ String key = reader.readLine();
+ if (key == null || key.length() == 0)
+ return false;
+
+ TrainsGenericCollection collection = new TrainsGenericCollection<>(_pictureWidth, _pictureHeight);
+ List trainsStrings = new ArrayList();
+
+ s = reader.readLine();
+ while (s != null && s.length() != 0){
+ trainsStrings.add(s);
+ s = reader.readLine();
+ }
+
+ Collections.reverse(trainsStrings);
+ for (String elem : trainsStrings) {
+ DrawingTrain train = ExtentionDrawingTrain.CreateDrawingTrain(elem, _separatorForObject, _pictureWidth, _pictureHeight);
+ if (train == null || collection.Add(train) == -1)
+ return false;
+ }
+
+ if (_trainStorages.containsKey(key))
+ _trainStorages.remove(key);
+ _trainStorages.put(key, collection);
+ } catch (IOException e) {
+ e.printStackTrace();
+ return false;
+ }
+
+ return true;
+ }
+
///
/// Сохранение информации по автомобилям в хранилище в файл
///
@@ -68,7 +136,7 @@ public class TrainsGenericStorage {
///
/// Путь и имя файла
/// true - загрузка прошла успешно, false - ошибка призагрузке данных
- public boolean loadData(String filename) {
+ public boolean LoadData(String filename) {
if (!new File(filename).exists()) {
return false;
}