PIbd-21. Putintsev D.M. Lab work 06. Hard #7

Closed
Danil wants to merge 1 commits from Lab6 into Lab5
5 changed files with 338 additions and 3 deletions

View File

@ -0,0 +1,80 @@
package RoadTrain.DrawingObjects;
import RoadTrain.Entities.EntityRoadTrain;
import RoadTrain.Entities.EntityTruck;
import RoadTrain.Extra.IDrawingWheels;
import java.awt.*;
public class ExtentionDrawningTruck{
public static DrawingTruck CreateDrawingTruck(String info, String separatorForObject, int width, int height)
{
String[] strs = info.split(separatorForObject);
if (strs.length == 5)
{
String[] colorValues = strs[2].split(",");
DrawingTruck drawingTruck = new DrawingTruck(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", ""))
),
width, height,
Integer.parseInt(strs[3]));
try{
drawingTruck.drawingWheels = (IDrawingWheels) Class.forName(strs[4]).getDeclaredConstructor().newInstance();
drawingTruck.drawingWheels.SetWheelNumber(drawingTruck.entityTruck.Numwheel);
}
catch(Exception e){
return null;
}
return drawingTruck;
}
if (strs.length == 8)
{
String[] colorValues = strs[2].split(",");
String[] colorValues2 = strs[5].split(",");
DrawingRoadTrain drawingRoadTrain = new DrawingRoadTrain(
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", ""))
),
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"),
width, height,
Integer.parseInt(strs[3]));
try{
drawingRoadTrain.drawingWheels = (IDrawingWheels) Class.forName(strs[4]).getDeclaredConstructor().newInstance();
drawingRoadTrain.drawingWheels.SetWheelNumber(drawingRoadTrain.entityTruck.Numwheel);
}
catch(Exception e){
return null;
}
return drawingRoadTrain;
}
return null;
}
public static String GetDataForSave(DrawingTruck drawingTruck, String separatorForObject)
{
EntityTruck truck = drawingTruck.entityTruck;
if (truck == null)
{
return null;
}
String str = "" + truck.GetSpeed() + separatorForObject + (int)truck.GetWeight() + separatorForObject + truck.GetBodyColor() + separatorForObject + truck.Numwheel + separatorForObject + drawingTruck.drawingWheels.getClass().getName();
if (!(truck instanceof EntityRoadTrain))
{
return str;
}
return str + separatorForObject + ((EntityRoadTrain)truck).GetAdditionalColor().toString()+separatorForObject+((EntityRoadTrain)truck).GetWaterContainer()+separatorForObject+((EntityRoadTrain)truck).GetSweepingBrush();
}
}

View File

@ -7,9 +7,11 @@ import RoadTrain.DrawingObjects.*;
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.filechooser.FileNameExtensionFilter;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.*;
public class FormTruckCollection {
@ -211,6 +213,105 @@ public class FormTruckCollection {
}
}
);
JMenuBar menuBar = new JMenuBar();
JMenu fileMenu = new JMenu("Файл");
JMenuItem openItem = new JMenuItem("Загрузить");
openItem.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e){
JFileChooser fileChooser = new JFileChooser();
fileChooser.setDialogTitle("Выберите файл для загрузки данных");
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() {
public void actionPerformed(ActionEvent e){
JFileChooser fileChooser = new JFileChooser();
fileChooser.setDialogTitle("Выберите файл для сохранения данных");
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() {
public void actionPerformed(ActionEvent e){
JFileChooser fileChooser = new JFileChooser();
fileChooser.setDialogTitle("Выберите файл для загрузки данных");
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("Выберите файл для сохранения данных");
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.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
@ -221,6 +322,7 @@ public class FormTruckCollection {
ButtonRemoveTruck.setBounds(pictureBoxWidth, 60, 160, 20);
ButtonRefreshCollection.setBounds(pictureBoxWidth, 90, 160, 20);
FormTruckGenerate.setBounds(pictureBoxWidth, 120, 160, 20);
menuBar.setBounds(pictureBoxWidth, 360, 160, 20);
buttonAddSet.setBounds(pictureBoxWidth, 150, 160, 20);
textBoxSetName.setBounds(pictureBoxWidth, 180, 160, 20);
@ -238,6 +340,7 @@ public class FormTruckCollection {
Frame.add(textBoxSetName);
Frame.add(jListStorage);
Frame.add(buttonRemoveSet);
Frame.add(menuBar);
Frame.add(buttonGetRemoved);
Frame.setVisible(true);

View File

@ -17,7 +17,7 @@ public class SetGeneric<T extends Object> {
if (_places.size() >= _maxCount)
return -1;
_places.add(0, train);
return 0;
return 1;
}
public boolean Insert(T train, int position) {
if (_places.size() >= _maxCount)
@ -74,4 +74,5 @@ public class SetGeneric<T extends Object> {
}
};
}
public void clear(){ _places.clear(); }
}

View File

@ -25,6 +25,7 @@ public class TrucksGenericCollection<T extends DrawingTruck, U extends IMoveable
_pictureHeight = pictureHeight;
_collection = new SetGeneric<T>(width * height);
}
public Iterable<T> getTrucks(final Integer maxTrucks) { return _collection.GetTrucks(maxTrucks); }
// Перегрузка оператора сложения
public int Add(T obj) {
@ -84,4 +85,5 @@ public class TrucksGenericCollection<T extends DrawingTruck, U extends IMoveable
i++;
}
}
public void clear(){ _collection.clear(); }
}

View File

@ -3,8 +3,8 @@ package RoadTrain.Generics;
import RoadTrain.DrawingObjects.*;
import RoadTrain.MovementStraregy.*;
import java.util.HashMap;
import java.util.List;
import java.io.*;
import java.util.*;
import java.util.stream.Collectors;
public class TrucksGenericStorage {
@ -12,12 +12,161 @@ public class TrucksGenericStorage {
public List<String> Keys(){return _truckStorages.keySet().stream().collect(Collectors.toList());}
private int _pictureWidth;
private int _pictureHeight;
// Разделитель для записи ключа и значения элемента словаря
private static String _separatorForKeyValueWR = "|";
private static String _separatorForKeyValue = "\\|";
// Разделитель для записей коллекции данных в файл
private String _separatorRecordsWR = ";";
private String _separatorRecords = "\\;";
// Разделитель для записи информации по объекту в файл
private static String _separatorForObjectWR = ":";
private static String _separatorForObject = "\\:";
public TrucksGenericStorage(int pictureWidth, int pictureHeight)
{
_truckStorages = new HashMap<String, TrucksGenericCollection<DrawingTruck, DrawingObjectTruck>>();
_pictureWidth = pictureWidth;
_pictureHeight = pictureHeight;
}
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 (DrawingTruck elem : _truckStorages.get(key).getTrucks(100)) {
if (_truckStorages.get(key) == null)
return false;
data.append(elem != null ? ExtentionDrawningTruck.GetDataForSave(elem, _separatorForObjectWR) + "\n" : "");
}
if (data.length() == 0)
return false;
try (BufferedWriter writer = new BufferedWriter(new FileWriter(filename))) {
writer.write("TruckStorageSingle" + 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("TruckStorageSingle"))
return false;
String key = reader.readLine();
if (key == null || key.length() == 0)
return false;
TrucksGenericCollection<DrawingTruck, DrawingObjectTruck> collection;
if (_truckStorages.containsKey(key)){
collection = _truckStorages.get(key);
collection.clear();
}
else
collection = new TrucksGenericCollection<>(_pictureWidth, _pictureHeight);
List<String> trainsStrings = new ArrayList<String>();
s = reader.readLine();
while (s != null && s.length() != 0){
trainsStrings.add(s);
s = reader.readLine();
}
Collections.reverse(trainsStrings);
for (String elem : trainsStrings) {
DrawingTruck train = ExtentionDrawningTruck.CreateDrawingTruck(elem, _separatorForObject, _pictureWidth, _pictureHeight);
if (train == null || collection.Add(train) == -1)
return false;
}
_truckStorages.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<String, TrucksGenericCollection<DrawingTruck, DrawingObjectTruck>> record : _truckStorages.entrySet()) {
StringBuilder records = new StringBuilder();
for (DrawingTruck elem : record.getValue().getTrucks(100)) {
records.append(elem != null ? ExtentionDrawningTruck.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("TruckStorage" + 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("TruckStorage"))
return false;
_truckStorages.clear();
s = reader.readLine();
while (s != null && s.length() != 0) {
String[] record = s.split(_separatorForKeyValue);
s = reader.readLine();
if (record.length != 2) {
continue;
}
TrucksGenericCollection<DrawingTruck, DrawingObjectTruck> collection = new TrucksGenericCollection<>(_pictureWidth, _pictureHeight);
String[] set = record[1].split(_separatorRecords);
List<String> reversedSet = Arrays.asList(set);
Collections.reverse(reversedSet);
for (String elem : reversedSet) {
DrawingTruck truck = ExtentionDrawningTruck.CreateDrawingTruck(elem, _separatorForObject, _pictureWidth, _pictureHeight);
if (truck == null || collection.Add(truck) == -1)
return false;
}
_truckStorages.put(record[0], collection);
}
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
public void AddSet(String name)
{
if (_truckStorages.containsKey(name))