PIbd-21 Belianin N.N. LabWork07 Hard #10

Closed
Belnik wants to merge 8 commits from LabWork07 into LabWork06
12 changed files with 284 additions and 86 deletions
Showing only changes of commit 3000cc1889 - Show all commits

29
Tank/Errors.log Normal file
View File

@ -0,0 +1,29 @@
[WARN ] Коллекция переполнена: В наборе превышено допустимое количество: 15 (05.12.2023)
[WARN ] Коллекция переполнена: В наборе превышено допустимое количество: 15 (05.12.2023)
[WARN ] Коллекция переполнена: В наборе превышено допустимое количество: 15 (05.12.2023)
[WARN ] Коллекция переполнена: В наборе превышено допустимое количество: 15 (05.12.2023)
[ERROR]
Ошибка при загрузке всех объектов из файла: Объект не найден (05.12.2023)
[WARN ] Коллекция переполнена: В наборе превышено допустимое количество: 15 (05.12.2023)
[ERROR]
Ошибка при загрузке всех объектов из файла: Объект не найден (05.12.2023)
[WARN ] Коллекция переполнена: В наборе превышено допустимое количество: 15 (05.12.2023)
[ERROR]
Ошибка при загрузке всех объектов из файла: Объект не найден (05.12.2023)
[ERROR] Error saving all maps to file: Файл не найден (05.12.2023)
[WARN ] Не удалось удалить объект с позиции1 (05.12.2023)
[WARN ] Не удалось удалить объект с позиции1 (05.12.2023)
[WARN ] Не удалось удалить объект с позиции1 (05.12.2023)
[WARN ] Не удалось удалить объект с позиции1411 (05.12.2023)
[WARN ] Не удалось удалить объект с позиции1411 (05.12.2023)
[WARN ] Не удалось удалить объект с позиции0 (05.12.2023)
[WARN ] Коллекция переполнена: В наборе превышено допустимое количество: 15 (05.12.2023)
[ERROR] Error saving all maps to file: Файл не найден (05.12.2023)
[ERROR] Error saving all maps to file: Файл не найден (05.12.2023)
[ERROR] Error saving all maps to file: Файл не найден (05.12.2023)
[ERROR] Error saving all maps to file: Файл не найден (05.12.2023)
[ERROR] Error saving all maps to file: Файл не найден (05.12.2023)
[WARN ] Коллекция переполнена: В наборе превышено допустимое количество: 15 (05.12.2023)
[WARN ] Не удалось удалить объект с позиции14 (05.12.2023)
[WARN ] Коллекция переполнена: В наборе превышено допустимое количество: 15 (05.12.2023)
[WARN ] Не удалось удалить объект с позиции14 (05.12.2023)

79
Tank/Infos.log Normal file
View File

@ -0,0 +1,79 @@
[INFO ] Загрузка всех объектов из файла: C:\Users\Никита\Java\2 курс\Lab7\file.txt (05.12.2023)
[INFO ] Объект с позиции 0удалён (05.12.2023)
[INFO ] Не удалось удалить объект из набора (05.12.2023)
[INFO ] Не удалось удалить объект из набора (05.12.2023)
[INFO ] Не удалось удалить объект из набора (05.12.2023)
[INFO ] Не удалось удалить объект из набора (05.12.2023)
[INFO ] Загрузка всех объектов из файла: C:\Users\Никита\Java\2 курс\Lab7\file.txt (05.12.2023)
[INFO ] Не удалось удалить объект с позиции 0 (05.12.2023)
[INFO ] Не удалось удалить объект с позиции 12 (05.12.2023)
[INFO ] Объект с позиции 0удалён (05.12.2023)
[INFO ] Не удалось удалить объект с позиции 0 (05.12.2023)
[INFO ] Загрузка всех объектов из файла: C:\Users\Никита\Java\2 курс\Lab7\file.txt (05.12.2023)
[INFO ] Загрузка всех объектов из файла: C:\Users\Никита\Java\2 курс\Lab7\file.txt (05.12.2023)
[INFO ] Не удалось удалить объект с позиции 1 (05.12.2023)
[INFO ] Добавлен новый объект (05.12.2023)
[INFO ] Не удалось удалить объект с позиции 1 (05.12.2023)
[INFO ] Не удалось удалить объект с позиции 0 (05.12.2023)
[INFO ] Загрузка всех объектов из файла: C:\Users\Никита\Java\2 курс\Lab7\file.txt (05.12.2023)
[INFO ] Объект с позиции 14удалён (05.12.2023)
[INFO ] Добавлен новый объект (05.12.2023)
[INFO ] Не удалось удалить объект с позиции 0 (05.12.2023)
[INFO ] Не удалось удалить объект с позиции 0 (05.12.2023)
[INFO ] Не удалось удалить объект с позиции 0 (05.12.2023)
[INFO ] Не удалось удалить объект с позиции 0 (05.12.2023)
[INFO ] Не удалось удалить объект с позиции 100 (05.12.2023)
[INFO ] Загрузка всех объектов из файла: E:\RPP\java\Lab7\file.txt (05.12.2023)
[INFO ] Объект с позиции 14удалён (05.12.2023)
[INFO ] Не удалось удалить объект с позиции 14 (05.12.2023)
[INFO ] Не удалось удалить объект с позиции 1 (05.12.2023)
[INFO ] Загрузка всех объектов из файла: E:\RPP\java\Lab7\file.txt (05.12.2023)
[INFO ] Объект с позиции 14удалён (05.12.2023)
[INFO ] Не удалось удалить объект с позиции 14 (05.12.2023)
[INFO ] Загрузка всех объектов из файла: E:\RPP\java\Lab7\file.txt (05.12.2023)
[INFO ] Не удалось удалить объект с позиции 0 (05.12.2023)
[INFO ] Не удалось удалить объект с позиции 0 (05.12.2023)
[INFO ] Не удалось удалить объект с позиции 11 (05.12.2023)
[INFO ] Не удалось удалить объект с позиции 1 (05.12.2023)
[INFO ] Не удалось удалить объект с позиции 21 (05.12.2023)
[INFO ] Не удалось удалить объект с позиции 11 (05.12.2023)
[INFO ] Набор добавлен: 1 (05.12.2023)
[INFO ] Добавлен новый объект (05.12.2023)
[INFO ] Добавлен новый объект (05.12.2023)
[INFO ] Добавлен новый объект (05.12.2023)
[INFO ] Добавлен новый объект (05.12.2023)
[INFO ] Добавлен новый объект (05.12.2023)
[INFO ] Добавлен новый объект (05.12.2023)
[INFO ] Добавлен новый объект (05.12.2023)
[INFO ] Добавлен новый объект (05.12.2023)
[INFO ] Добавлен новый объект (05.12.2023)
[INFO ] Добавлен новый объект (05.12.2023)
[INFO ] Добавлен новый объект (05.12.2023)
[INFO ] Добавлен новый объект (05.12.2023)
[INFO ] Добавлен новый объект (05.12.2023)
[INFO ] Добавлен новый объект (05.12.2023)
[INFO ] Добавлен новый объект (05.12.2023)
[INFO ] Набор добавлен: 12 (05.12.2023)
[INFO ] Набор добавлен: 1 (05.12.2023)
[INFO ] Добавлен новый объект (05.12.2023)
[INFO ] Добавлен новый объект (05.12.2023)
[INFO ] Добавлен новый объект (05.12.2023)
[INFO ] Добавлен новый объект (05.12.2023)
[INFO ] Добавлен новый объект (05.12.2023)
[INFO ] Добавлен новый объект (05.12.2023)
[INFO ] Добавлен новый объект (05.12.2023)
[INFO ] Добавлен новый объект (05.12.2023)
[INFO ] Добавлен новый объект (05.12.2023)
[INFO ] Добавлен новый объект (05.12.2023)
[INFO ] Добавлен новый объект (05.12.2023)
[INFO ] Добавлен новый объект (05.12.2023)
[INFO ] Добавлен новый объект (05.12.2023)
[INFO ] Добавлен новый объект (05.12.2023)
[INFO ] Добавлен новый объект (05.12.2023)
[INFO ] Сохранение всех объектов в файл: E:\file.txt (05.12.2023)
[INFO ] Загрузка всех объектов из файла: E:\file.txt (05.12.2023)
[INFO ] Объект с позиции 1удалён (05.12.2023)
[INFO ] Загрузка всех объектов из файла: E:\file.txt (05.12.2023)
[INFO ] Объект с позиции 14удалён (05.12.2023)
[INFO ] Загрузка всех объектов из файла: E:\file.txt (05.12.2023)
[INFO ] Объект с позиции 14удалён (05.12.2023)

View File

@ -1,11 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

View File

@ -14,10 +14,11 @@ import javax.swing.filechooser.FileNameExtensionFilter;
import java.util.LinkedList;
import java.util.Queue;
import org.apache.logging.log4j.Logger;
public class FormTankCollection {
private class Canvas extends JComponent {
public Canvas() {
}
public Canvas() { }
public void paintComponent(Graphics g) {
super.paintComponent(g);
@ -61,7 +62,13 @@ public class FormTankCollection {
}
}
FormTankCollection() {
// Логгер
private Logger logger;
FormTankCollection(Logger logger) {
System.setProperty("log4j.configutationFile", "src//log4j2.xml");
this.logger = logger;
listModel = new DefaultListModel<String>();
jListStorage = new JList<String>(listModel);
canv = new Canvas();
@ -73,6 +80,7 @@ public class FormTankCollection {
new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (jListStorage.getSelectedIndex() == -1) {
logger.warn("Добавление объекта в несуществующий набор");
return;
}
var obj = _storage.get(jListStorage.getSelectedValue());
@ -84,11 +92,20 @@ public class FormTankCollection {
form.buttonAdd.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (obj != null && obj.Add(form._vehicle) != -1) {
JOptionPane.showMessageDialog(null, "Объект добавлен", "Информация", JOptionPane.INFORMATION_MESSAGE);
Draw();
} else {
try {
if (obj != null && obj.Add(form._vehicle) != -1) {
logger.info("Добавлен новый объект");
JOptionPane.showMessageDialog(null, "Объект добавлен", "Информация", JOptionPane.INFORMATION_MESSAGE);
Draw();
}
} catch (TankStorageOverflowException ex) {
logger.warn("Коллекция переполнена: "+ex.getMessage());
JOptionPane.showMessageDialog(null, ex.getMessage());
JOptionPane.showMessageDialog(null, "Не удалось добавить объект", "Информация", JOptionPane.INFORMATION_MESSAGE);
} catch (Exception ex){
logger.fatal("Неизвестная ошибка: "+ex.getMessage());
JOptionPane.showMessageDialog(null, "Ошибка. Неизвестная ошибка: "+ex.getMessage(), "Ошибка", JOptionPane.ERROR_MESSAGE);
}
form.Frame.dispose();
}
@ -106,6 +123,7 @@ public class FormTankCollection {
new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (jListStorage.getSelectedIndex() == -1) {
logger.warn("Удаление объекта из несуществующего набора");
return;
}
var obj = _storage.get(jListStorage.getSelectedValue());
@ -127,13 +145,25 @@ public class FormTankCollection {
}
int pos = Integer.parseInt(TextBoxNumber.getText());
var removed = obj.remove(pos);
if (removed != null) {
Queue.add(removed);
JOptionPane.showMessageDialog(null, "Объект удален", "Информация", JOptionPane.INFORMATION_MESSAGE);
Draw();
} else {
JOptionPane.showMessageDialog(null, "Не удалось удалить объект", "Информация", JOptionPane.INFORMATION_MESSAGE);
try {
var removed = obj.remove(pos);
if (removed != null) {
JOptionPane.showMessageDialog(null, "Объект удален", "Информация", JOptionPane.INFORMATION_MESSAGE);
Queue.add(removed);
Draw();
logger.info("Объект с позиции " + pos + "удалён");
}
else
{
JOptionPane.showMessageDialog(null, "Не удалось удалить объект", "Информация", JOptionPane.INFORMATION_MESSAGE);
logger.info("Не удалось удалить объект с позиции " + pos);
}
} catch (TankNotFoundException ex) {
logger.warn("Не удалось удалить объект с позиции"+ pos);
JOptionPane.showMessageDialog(null, ex.getMessage());
} catch (Exception ex) {
logger.fatal("Неизвестная ошибка: " +ex.getMessage());
JOptionPane.showMessageDialog(null, "Неизвестная ошибка: "+ex.getMessage(), "Ошибка", JOptionPane.ERROR_MESSAGE);
}
}
}
@ -180,10 +210,12 @@ public class FormTankCollection {
public void actionPerformed(ActionEvent e) {
if (textBoxSetName.getText().length() == 0) {
JOptionPane.showMessageDialog(null, "Не все данные заполнены", "Информация", JOptionPane.INFORMATION_MESSAGE);
logger.warn("Не все данные заполнены");
return;
}
_storage.AddSet(textBoxSetName.getText());
ReloadObjects();
logger.info("Набор добавлен: "+textBoxSetName.getText());
}
}
);
@ -201,12 +233,14 @@ public class FormTankCollection {
new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (jListStorage.getSelectedIndex() == -1) {
logger.warn("Удаление несуществующего набора");
return;
}
if (JOptionPane.showConfirmDialog(null, "Удалить объект " + jListStorage.getSelectedValue() + "?", "Удаление", JOptionPane.YES_NO_OPTION) == JOptionPane.NO_OPTION) {
return;
}
_storage.DelSet(jListStorage.getSelectedValue());
logger.info("Гараж "+jListStorage.getSelectedValue()+" Удалён");
ReloadObjects();
}
}
@ -233,10 +267,15 @@ public class FormTankCollection {
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);
try {
_storage.LoadData(fileChooser.getSelectedFile().getAbsolutePath());
ReloadObjects();
logger.info("Загрузка всех объектов из файла: " + fileChooser.getSelectedFile().getAbsolutePath());
JOptionPane.showMessageDialog(null, "Загрузка всех объектов прошла успешно", "Результат", JOptionPane.INFORMATION_MESSAGE);
} catch (Exception ex) {
logger.error("\n" + "Ошибка при загрузке всех объектов из файла: " + ex.getMessage());
JOptionPane.showMessageDialog(null,"Ошибка при загрузке всех объектов" + ex.getMessage(), "Результат", JOptionPane.ERROR_MESSAGE);
}
}
ReloadObjects();
@ -256,10 +295,15 @@ public class FormTankCollection {
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);
try {
_storage.SaveData(fileChooser.getSelectedFile().getAbsolutePath());
logger.info("Сохранение всех объектов в файл: " + fileChooser.getSelectedFile().getAbsolutePath());
JOptionPane.showMessageDialog(null,"Сохранение объектов прошло успешно", "Результат", JOptionPane.INFORMATION_MESSAGE);
} catch (Exception ex) {
logger.error("Error saving all maps to file: " +ex.getMessage());
JOptionPane.showMessageDialog(null, "Ошибка при сохранении объектов: "+ex.getMessage(), "Результат", JOptionPane.ERROR_MESSAGE);
}
}
}
}
@ -281,10 +325,14 @@ public class FormTankCollection {
if (fileChooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
File selectedFile = fileChooser.getSelectedFile();
if (_storage.LoadDataSingle(selectedFile.getAbsolutePath())) {
try {
_storage.LoadDataSingle(fileChooser.getSelectedFile().getAbsolutePath());
ReloadObjects();
logger.info("Загрузка всех объектов из файла: " + fileChooser.getSelectedFile().getAbsolutePath());
JOptionPane.showMessageDialog(null, "Загрузка прошла успешно", "Результат", JOptionPane.INFORMATION_MESSAGE);
} else {
JOptionPane.showMessageDialog(null, "Не загрузилось", "Результат", JOptionPane.ERROR_MESSAGE);
} catch (Exception ex) {
logger.error("\n" + "Ошибка при загрузке всех объектов из файла: " + ex.getMessage());
JOptionPane.showMessageDialog(null, "Не загрузилось" + ex.getMessage(), "Результат", JOptionPane.ERROR_MESSAGE);
}
}
ReloadObjects();
@ -308,10 +356,15 @@ public class FormTankCollection {
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);
try {
_storage.SaveDataSingle(fileChooser.getSelectedFile().getAbsolutePath(), jListStorage.getSelectedValue());
logger.info("Сохранение всех объектов в файл: " + fileChooser.getSelectedFile().getAbsolutePath());
JOptionPane.showMessageDialog(null,"Сохранение прошло успешно", "Результат", JOptionPane.INFORMATION_MESSAGE);
} catch (Exception ex) {
logger.error("Error saving all maps to file: " +ex.getMessage());
JOptionPane.showMessageDialog(null, "Не сохранилось: "+ex.getMessage(), "Результат", JOptionPane.ERROR_MESSAGE);
}
}
}
}

View File

@ -231,12 +231,12 @@ public class FormTankConfig {
labelAdditionalColor.setTransferHandler(
new TransferHandler(){
@Override
public boolean canImport(TransferHandler.TransferSupport support) {
public boolean canImport(TransferSupport support) {
return support.isDataFlavorSupported(ColorTransferable.colorDataFlavor);
}
@Override
public boolean importData(TransferHandler.TransferSupport support) {
public boolean importData(TransferSupport support) {
if (canImport(support)) {
try {
Color color = (Color) support.getTransferable().getTransferData(ColorTransferable.colorDataFlavor);
@ -262,12 +262,12 @@ public class FormTankConfig {
labelWheel.setTransferHandler(
new TransferHandler(){
@Override
public boolean canImport(TransferHandler.TransferSupport support) {
public boolean canImport(TransferSupport support) {
return support.isDataFlavorSupported(WheelTransferable.wheelDrawingDataFlavor);
}
@Override
public boolean importData(TransferHandler.TransferSupport support) {
public boolean importData(TransferSupport support) {
if (canImport(support)) {
try {
IOrnamentForm wheelDrawing = (IOrnamentForm) support.getTransferable().getTransferData(WheelTransferable.wheelDrawingDataFlavor);
@ -289,12 +289,12 @@ public class FormTankConfig {
canvas.setTransferHandler(
new TransferHandler(){
@Override
public boolean canImport(TransferHandler.TransferSupport support) {
public boolean canImport(TransferSupport support) {
return support.isDataFlavorSupported(DataFlavor.stringFlavor);
}
@Override
public boolean importData(TransferHandler.TransferSupport support) {
public boolean importData(TransferSupport support) {
if (canImport(support)) {
try {
String data = (String) support.getTransferable().getTransferData(DataFlavor.stringFlavor);

View File

@ -1,5 +1,7 @@
import org.apache.logging.log4j.*;
public class Main {
public static void main(String[] args) {
new FormTankCollection();
new FormTankCollection(LogManager.getLogger(Main.class));
}
}

View File

@ -17,18 +17,18 @@ public class SetGeneric <T extends Object> {
// Добавление объектов в набор
public int Insert(T tank) {
if(_places.size() >= _maxCount)
return -1;
throw new TankStorageOverflowException(_maxCount);
_places.add(0,tank);
return 0;
}
public boolean Insert(T tank, int position) {
// Проверка позиции
if (position < 0 || position > _places.size())
return false;
if (position < 0 || position >= _maxCount)
throw new TankNotFoundException(position);
if (_places.size() >= _maxCount)
return false;
throw new TankStorageOverflowException(_maxCount);
if (position == _places.size())
_places.add(tank);
@ -41,8 +41,9 @@ public class SetGeneric <T extends Object> {
// Удаление объекта из набора с конкретной позиции
public boolean Remove(int position) {
// Проверка позиции
if (position < 0 || position >= _places.size())
return false;
if (position < 0 || position >= Count() || position > _maxCount)
throw new TankNotFoundException(position);
_places.remove(position);
return true;
}

View File

@ -0,0 +1,15 @@
public class TankNotFoundException extends RuntimeException {
public TankNotFoundException() { }
public TankNotFoundException(String message) {
super(message);
}
public TankNotFoundException(String message, Throwable exception) {
super(message, exception);
}
public TankNotFoundException(Throwable exception) {
super(exception);
}
protected TankNotFoundException(int pos) {
super("Не найден объект по позиции "+pos);
}
}

View File

@ -0,0 +1,15 @@
public class TankStorageOverflowException extends RuntimeException{
public TankStorageOverflowException() { }
public TankStorageOverflowException(String message){
super(message);
}
public TankStorageOverflowException(String message, Throwable exception){
super(message, exception);
}
protected TankStorageOverflowException(Throwable exception){
super(exception);
}
public TankStorageOverflowException(int count){
super("В наборе превышено допустимое количество: "+count);
}
}

View File

@ -39,9 +39,8 @@ public class TanksGenericCollections<T extends DrawingArmoVehicle, U extends IMo
// Перегрузка оператора вычитания
public T remove(int pos) {
T obj = _collection.Get(pos);
if (obj != null) {
_collection.Remove(pos);
}
_collection.Remove(pos);
return obj;
}

View File

@ -1,11 +1,8 @@
import com.sun.nio.sctp.InvalidStreamException;
import java.io.*;
import java.util.*;
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;
@ -23,7 +20,7 @@ public class TanksGenericStorage {
private static String _separatorForObjectWR = ":";
private static String _separatorForObject = "\\:";
public boolean SaveDataSingle(String filename, String key) {
public void SaveDataSingle(String filename, String key) throws IOException {
if(new File(filename).exists()) {
new File(filename).delete();
}
@ -32,40 +29,38 @@ public class TanksGenericStorage {
data.append(key).append("\n");
for (DrawingArmoVehicle elem: _tankStorages.get(key).getTanks(100)) {
if(_tankStorages.get(key) == null)
return false;
throw new InvalidPropertiesFormatException("");
if(_tankStorages.get(key) != null)
data.append(elem != null ? ExtentionDrawingTank.GetDataForSave(elem, _separatorForObjectWR) + "\n" : "");
}
if(data.length() == 0)
return false;
throw new InvalidStreamException("File not found, нет данных для сохранения");
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) {
public void LoadDataSingle(String filename) throws IOException {
if(!new File(filename).exists()) {
return false;
throw new FileNotFoundException("Файл не найден");
}
try (BufferedReader reader = new BufferedReader(new FileReader(filename))) {
String s = reader.readLine();
if(s == null || s.length() == 0)
return false;
throw new NullPointerException("Нет данных для загрузки");
if(!s.startsWith("TankStorageSingle"))
return false;
throw new IllegalArgumentException("Неверный формат данных"); //если нет такой записи, то это не те данные
String key = reader.readLine();
if(key == null || key.length() == 0)
return false;
throw new NullPointerException("Нет данных для загрузки");
TanksGenericCollections<DrawingArmoVehicle, DrawingObjectTank> collections = new TanksGenericCollections<>(_pictureWidth, _pictureHeight);
if (_tankStorages.containsKey(key)){
@ -87,7 +82,7 @@ public class TanksGenericStorage {
for (String elem : tanksStrings) {
DrawingArmoVehicle vehicle = ExtentionDrawingTank.CreateDrawingTank(elem, _separatorForObject, _pictureWidth, _pictureHeight);
if(vehicle == null || collections.Add(vehicle) == -1)
return false;
throw new NoSuchElementException("Объект не найден");
}
if(_tankStorages.containsKey(key))
@ -95,13 +90,11 @@ public class TanksGenericStorage {
_tankStorages.put(key, collections);
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
// Сохранение информации по технике в хранилище в файл
public boolean SaveData(String filename) {
public void SaveData(String filename) throws IOException {
if(new File(filename).exists()) {
new File(filename).delete();
}
@ -117,30 +110,28 @@ public class TanksGenericStorage {
}
if (data.length() == 0)
return false;
throw new InvalidStreamException("File not found, нет данных для сохранения");
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) {
public void LoadData(String filename) throws IOException {
if (!new File(filename).exists()) {
return false;
throw new FileNotFoundException("Файл не найден");
}
try (BufferedReader reader = new BufferedReader(new FileReader(filename))) {
String s = reader.readLine();
if (s == null || s.length() == 0)
return false;
throw new NullPointerException("Нет данных для загрузки");
if (!s.startsWith("TankStorage"))
return false;
throw new IllegalArgumentException("Неверный формат данных"); //если нет такой записи, то это не те данные
_tankStorages.clear();
@ -158,15 +149,13 @@ public class TanksGenericStorage {
for (String elem : reversedSet) {
DrawingArmoVehicle vehicle = ExtentionDrawingTank.CreateDrawingTank(elem, _separatorForObject, _pictureWidth, _pictureHeight);
if (vehicle == null || collection.Add(vehicle) == -1)
return false;
throw new NoSuchElementException("Объект не найден");
}
_tankStorages.put(record[0], collection);
}
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
// Словарь (как хранилище)

27
Tank/src/log4j2.xml Normal file
View File

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<Configuration status="info">
<Appenders>
<File name="error" fileName="Errors.log" append="true">
<PatternLayout>
<Pattern>
[%-5level] %msg (%d{dd.MM.yyyy})%n
</Pattern>
</PatternLayout>
<ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="DENY"/>
</File>
<File name="info" fileName="Infos.log" append="true">
<PatternLayout>
<Pattern>
[%-5level] %msg (%d{dd.MM.yyyy})%n
</Pattern>
</PatternLayout>
<ThresholdFilter level="INFO" onMatch="DENY" onMismatch="ACCEPT"/>
</File>
</Appenders>
<Loggers>
<Logger name="logger" level="info" additivity="false">
<AppenderRef ref="info" level="INFO"/>
<AppenderRef ref="error" level="WARN"/>
</Logger>
</Loggers>
</Configuration>