diff --git a/.idea/РПП Java.iml b/.idea/РПП Java.iml
index b107a2d..edc3da9 100644
--- a/.idea/РПП Java.iml
+++ b/.idea/РПП Java.iml
@@ -7,5 +7,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/AccordionBus/BusCollectionForm.form b/AccordionBus/BusCollectionForm.form
index af5c77a..94f546a 100644
--- a/AccordionBus/BusCollectionForm.form
+++ b/AccordionBus/BusCollectionForm.form
@@ -3,7 +3,7 @@
-
+
@@ -123,7 +123,17 @@
-
+
+
+
+
+
+
+
+
+
+
+
diff --git a/AccordionBus/BusCollectionForm.java b/AccordionBus/BusCollectionForm.java
index c95c665..1daeea6 100644
--- a/AccordionBus/BusCollectionForm.java
+++ b/AccordionBus/BusCollectionForm.java
@@ -1,5 +1,7 @@
package AccordionBus;
+import org.apache.logging.log4j.Logger;
+
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
@@ -15,6 +17,8 @@ import java.util.Random;
public class BusCollectionForm extends JFrame {
// Набор объектов
private final BusGenericStorage _storage;
+ // Логгер
+ private final Logger _logger;
// Набор удаленных объектов
private final LinkedList _deletedBuses;
// Выбранный автобус
@@ -48,10 +52,11 @@ public class BusCollectionForm extends JFrame {
private JMenuItem openCollectionItem = new JMenuItem("Загрузка коллекции");
// Конструктор
- public BusCollectionForm() {
+ public BusCollectionForm(Logger logger) {
pictureBoxCollection.setSize(new Dimension(700, 450));
_storage = new BusGenericStorage(pictureBoxCollection.getWidth(), pictureBoxCollection.getHeight());
_deletedBuses = new LinkedList();
+ _logger = logger;
// Модель списка
listModel = new DefaultListModel();
@@ -70,10 +75,12 @@ public class BusCollectionForm extends JFrame {
buttonAddObject.addActionListener(e -> {
if (textFieldStorage.getText().length() == 0) {
JOptionPane.showMessageDialog(null, "Не все данные заполнены", "Ошибка", JOptionPane.ERROR_MESSAGE);
+ _logger.error("Не удалось добавить набор: " + textFieldStorage.getText());
return;
}
_storage.AddSet(textFieldStorage.getText());
ReloadObjects();
+ _logger.info("Добавлен набор: " + textFieldStorage.getText());
});
// Выбор набора
@@ -87,23 +94,28 @@ public class BusCollectionForm extends JFrame {
// Удаление набора
buttonDeleteObject.addActionListener(e -> {
if (listStorages.getSelectedIndex() == -1) {
+ _logger.error("Не выбран набор для удаления");
return;
}
if (JOptionPane.showConfirmDialog(null, "Удалить объект " + listStorages.getSelectedValue() + "?", "Удаление", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
_storage.DelSet(listStorages.getSelectedValue().toString());
ReloadObjects();
+ _logger.info("Удален набор: " + listStorages.getSelectedValue().toString());
}
+ _logger.info("Отмена удаления набора");
});
// Добавление объета в набор
buttonAddBus.addActionListener(e -> {
if (listStorages.getSelectedIndex() == -1) {
+ _logger.warn("Не выбран набор для добавления объекта");
return;
}
var obj = _storage.get(listStorages.getSelectedValue().toString());
if (obj == null) {
+ _logger.warn("Выбранный набор не существует");
return;
}
@@ -113,15 +125,23 @@ public class BusCollectionForm extends JFrame {
frameBusConfig.busConfigForm.addButton.addActionListener(ev -> {
SelectedBus = frameBusConfig.busConfigForm._bus;
frameBusConfig.dispose();
- if (SelectedBus != null) {
- if (obj.plus(SelectedBus) > -2) {
- Refresh();
- JOptionPane.showMessageDialog(this.getMainPanel(), "Объект добавлен", "Успех", JOptionPane.INFORMATION_MESSAGE);
- }
- else {
- JOptionPane.showMessageDialog(this.getMainPanel(), "Объект не добавлен", "Ошибка", JOptionPane.INFORMATION_MESSAGE);
+ try {
+ if (SelectedBus != null) {
+ if (obj.plus(SelectedBus) > -2) {
+ Refresh();
+ JOptionPane.showMessageDialog(this.getMainPanel(), "Объект добавлен", "Успех", JOptionPane.INFORMATION_MESSAGE);
+ _logger.info("Добавлен объект: " + SelectedBus);
+ }
}
}
+ catch (StorageOverflowException ex) {
+ JOptionPane.showMessageDialog(this.getMainPanel(), "Объект не добавлен", "Ошибка", JOptionPane.INFORMATION_MESSAGE);
+ _logger.warn("Не удалось добавить объект: " + ex.getMessage());
+ }
+ catch (Exception ex) {
+ JOptionPane.showMessageDialog(this.getMainPanel(), "Объект не добавлен", "Ошибка", JOptionPane.INFORMATION_MESSAGE);
+ _logger.fatal("Не удалось добавить объект: " + ex.getMessage());
+ }
});
frameBusConfig.busConfigForm.cancelButton.addActionListener(ee -> frameBusConfig.dispose());
@@ -130,27 +150,38 @@ public class BusCollectionForm extends JFrame {
// Удаление объекта из набора
buttonRemoveBus.addActionListener(e -> {
if (listStorages.getSelectedIndex() == -1) {
+ _logger.warn("Не выбран набор для удаления объекта");
return;
}
var obj = _storage.get(listStorages.getSelectedValue().toString());
if (obj == null) {
+ _logger.warn("Выбранный набор не существует");
return;
}
if (JOptionPane.showConfirmDialog(null, "Удалить объект?", "Удаление", JOptionPane.YES_NO_OPTION) == JOptionPane.NO_OPTION) {
+ _logger.info("Отмена удаления набора");
return;
}
int pos = Integer.parseInt(textFieldNumber.getText());
- var removed = obj.minus(pos);
- if (removed != null) {
- _deletedBuses.add(removed);
- JOptionPane.showMessageDialog(null, "Объект удален", "Удаление", JOptionPane.INFORMATION_MESSAGE);
- Refresh();
+ try {
+ var removed = obj.minus(pos);
+ if (removed != null) {
+ _deletedBuses.add(removed);
+ JOptionPane.showMessageDialog(null, "Объект удален", "Удаление", JOptionPane.INFORMATION_MESSAGE);
+ Refresh();
+ _logger.info("Удален объект: " + removed);
+ }
}
- else {
+ catch (BusNotFoundException ex) {
JOptionPane.showMessageDialog(null, "Не удалось удалить объект", "Удаление", JOptionPane.INFORMATION_MESSAGE);
+ logger.warn("Не удалось удалить объект: " + ex.getMessage());
+ }
+ catch (Exception ex) {
+ JOptionPane.showMessageDialog(null, "Не удалось удалить объект", "Удаление", JOptionPane.INFORMATION_MESSAGE);
+ logger.fatal("Не удалось удалить объект: " + ex.getMessage());
}
});
@@ -195,11 +226,15 @@ public class BusCollectionForm extends JFrame {
if (fileChooser.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) {
File file = fileChooser.getSelectedFile();
- if (_storage.SaveData(file.getAbsolutePath())) {
- JOptionPane.showMessageDialog(null, "Сохранение прошло успешно", "Результат", JOptionPane.INFORMATION_MESSAGE);
+ try {
+ if (_storage.SaveData(file.getAbsolutePath())) {
+ JOptionPane.showMessageDialog(null, "Сохранение прошло успешно", "Результат", JOptionPane.INFORMATION_MESSAGE);
+ _logger.info("Сохранение данных в файл: " + file.getAbsolutePath());
+ }
}
- else {
+ catch (Exception ex) {
JOptionPane.showMessageDialog(null, "Не удалось сохранить данные", "Результат", JOptionPane.ERROR_MESSAGE);
+ _logger.error("Не удалось сохранить данные в файл: " + ex.getMessage());
}
}
}
@@ -211,6 +246,7 @@ public class BusCollectionForm extends JFrame {
public void actionPerformed(ActionEvent e) {
if (listStorages.getSelectedIndex() == -1) {
JOptionPane.showMessageDialog(null, "Не выбрана коллекция", "Ошибка", JOptionPane.ERROR_MESSAGE);
+ _logger.error("Не выбрана коллекция для сохранения");
return;
}
@@ -220,11 +256,15 @@ public class BusCollectionForm extends JFrame {
if (fileChooser.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) {
File file = fileChooser.getSelectedFile();
- if (_storage.SaveCollectionData(file.getAbsolutePath(), listStorages.getSelectedValue().toString())) {
- JOptionPane.showMessageDialog(null, "Сохранение прошло успешно", "Результат", JOptionPane.INFORMATION_MESSAGE);
+ try {
+ if (_storage.SaveCollectionData(file.getAbsolutePath(), listStorages.getSelectedValue().toString())) {
+ JOptionPane.showMessageDialog(null, "Сохранение прошло успешно", "Результат", JOptionPane.INFORMATION_MESSAGE);
+ _logger.info("Сохранение данных в файл: " + file.getAbsolutePath());
+ }
}
- else {
+ catch (Exception ex) {
JOptionPane.showMessageDialog(null, "Не удалось сохранить данные", "Результат", JOptionPane.ERROR_MESSAGE);
+ _logger.error("Не удалось сохранить данные в файл: " + ex.getMessage());
}
}
}
@@ -240,14 +280,18 @@ public class BusCollectionForm extends JFrame {
if (fileChooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
File file = fileChooser.getSelectedFile();
- if (_storage.LoadData(file.getAbsolutePath())) {
- JOptionPane.showMessageDialog(null, "Загрузка прошло успешно", "Результат", JOptionPane.INFORMATION_MESSAGE);
+ try {
+ if (_storage.LoadData(file.getAbsolutePath())) {
+ ReloadObjects();
+ JOptionPane.showMessageDialog(null, "Загрузка прошла успешно", "Результат", JOptionPane.INFORMATION_MESSAGE);
+ _logger.info("Загружены данные из файла: " + file.getAbsolutePath());
+ }
}
- else {
+ catch (Exception ex) {
JOptionPane.showMessageDialog(null, "Не удалось загрузить данные", "Результат", JOptionPane.ERROR_MESSAGE);
+ _logger.error("Не удалось загрузить данные из файла: " + ex.getMessage());
}
}
- ReloadObjects();
}
});
@@ -261,14 +305,18 @@ public class BusCollectionForm extends JFrame {
if (fileChooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
File file = fileChooser.getSelectedFile();
- if (_storage.LoadCollectionData(file.getAbsolutePath())) {
- JOptionPane.showMessageDialog(null, "Загрузка прошло успешно", "Результат", JOptionPane.INFORMATION_MESSAGE);
+ try {
+ if (_storage.LoadCollectionData(file.getAbsolutePath())) {
+ ReloadObjects();
+ JOptionPane.showMessageDialog(null, "Загрузка прошла успешно", "Результат", JOptionPane.INFORMATION_MESSAGE);
+ _logger.info("Загружены данные из файла: " + file.getAbsolutePath());
+ }
}
- else {
+ catch (Exception ex) {
JOptionPane.showMessageDialog(null, "Не удалось загрузить данные", "Результат", JOptionPane.ERROR_MESSAGE);
+ _logger.error("Не удалось загрузить данные из файла: " + ex.getMessage());
}
}
- ReloadObjects();
}
});
}
diff --git a/AccordionBus/BusGenericStorage.java b/AccordionBus/BusGenericStorage.java
index 501b71b..20b20c4 100644
--- a/AccordionBus/BusGenericStorage.java
+++ b/AccordionBus/BusGenericStorage.java
@@ -6,6 +6,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
+import java.util.zip.DataFormatException;
// Класс для хранения коллекции
public class BusGenericStorage {
@@ -76,7 +77,7 @@ public class BusGenericStorage {
}
// Сохранение информации по автобусам в хранилище в файл
- public boolean SaveData(String filename) {
+ public boolean SaveData(String filename) throws Exception {
if (new File(filename).exists()) {
new File(filename).delete();
}
@@ -91,7 +92,7 @@ public class BusGenericStorage {
}
if (data.length() == 0) {
- return false;
+ throw new IOException("Нет данных для сохранения!");
}
try (BufferedWriter writer = new BufferedWriter(new FileWriter(filename))) {
@@ -106,7 +107,7 @@ public class BusGenericStorage {
}
// Сохранение информации по автобусам из коллекции хранилища в файл
- public boolean SaveCollectionData(String filename, String key) {
+ public boolean SaveCollectionData(String filename, String key) throws Exception {
if (new File(filename).exists()) {
new File(filename).delete();
}
@@ -118,7 +119,7 @@ public class BusGenericStorage {
}
if (data.length() == 0) {
- return false;
+ throw new Exception("Невалидная операция, нет данных для сохранения!");
}
try (BufferedWriter writer = new BufferedWriter(new FileWriter(filename))) {
@@ -133,20 +134,20 @@ public class BusGenericStorage {
}
// Загрузка информации по автобусам в хранилище из файла
- public boolean LoadData(String filename) {
+ public boolean LoadData(String filename) throws Exception {
if (!new File(filename).exists()) {
- return false;
+ throw new FileNotFoundException("Файл не найден!");
}
try (BufferedReader reader = new BufferedReader(new FileReader(filename))) {
String line = reader.readLine();
// Если строка пустая
if (line == null || line.length() == 0) {
- return false;
+ throw new IOException("Нет данных для загрузки!");
}
// Если нет записи "BusStorage", то это не те данные
if (!line.startsWith("BusStorage")) {
- return false;
+ throw new DataFormatException("Неверный формат данных!");
}
_busStorages.clear();
@@ -164,7 +165,7 @@ public class BusGenericStorage {
DrawingBus bus = ExtensionDrawingBus.CreateDrawingBus(elem, _separatorForObject, _pictureWidth, _pictureHeight);
if (bus != null) {
if (collection.plus(bus) == -1) {
- return false;
+ throw new Exception("Ошибка добавления в коллекцию!");
}
}
}
@@ -182,26 +183,26 @@ public class BusGenericStorage {
}
// Загрузка информации по автобусам в коллекцию хранилища из файла
- public boolean LoadCollectionData(String filename) {
+ public boolean LoadCollectionData(String filename) throws Exception {
if (!new File(filename).exists()) {
- return false;
+ throw new FileNotFoundException("Файл не найден!");
}
try (BufferedReader reader = new BufferedReader(new FileReader(filename))) {
String line = reader.readLine();
// Если строка пустая
if (line == null || line.length() == 0) {
- return false;
+ throw new IOException("Нет данных для загрузки!");
}
// Если нет записи "BusCollectionStorage", то это не те данные
if (!line.startsWith("BusCollectionStorage")) {
- return false;
+ throw new DataFormatException("Неверный формат данных!");
}
String key = reader.readLine();
// Если значение ключа пустое
if (key == null || key.length() == 0) {
- return false;
+ throw new IOException("Нет данных для загрузки!");
}
BusGenericCollection collection;
@@ -224,7 +225,7 @@ public class BusGenericStorage {
DrawingBus bus = ExtensionDrawingBus.CreateDrawingBus(elem, _separatorForObject, _pictureWidth, _pictureHeight);
if (bus != null) {
if (collection.plus(bus) == -1) {
- return false;
+ throw new Exception("Ошибка добавления в коллекцию!");
}
}
}
diff --git a/AccordionBus/BusNotFoundException.java b/AccordionBus/BusNotFoundException.java
new file mode 100644
index 0000000..920e097
--- /dev/null
+++ b/AccordionBus/BusNotFoundException.java
@@ -0,0 +1,20 @@
+package AccordionBus;
+
+import java.io.Serializable;
+
+public class BusNotFoundException extends RuntimeException implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ public BusNotFoundException(int i) {
+ super("Не найден объект по позиции " + i);
+ }
+ public BusNotFoundException() {
+ super();
+ }
+ public BusNotFoundException(String message) {
+ super(message);
+ }
+ public BusNotFoundException(String message, Throwable exception) {
+ super(message, exception);
+ }
+}
diff --git a/AccordionBus/FrameBusCollection.java b/AccordionBus/FrameBusCollection.java
index dad73ad..72bbb53 100644
--- a/AccordionBus/FrameBusCollection.java
+++ b/AccordionBus/FrameBusCollection.java
@@ -1,16 +1,18 @@
package AccordionBus;
+import org.apache.logging.log4j.Logger;
+
import javax.swing.*;
import java.awt.*;
public class FrameBusCollection extends JFrame {
public BusCollectionForm busCollectionForm;
- public FrameBusCollection() {
+ public FrameBusCollection(Logger logger) {
super();
setTitle("Набор автобусов");
setDefaultCloseOperation(EXIT_ON_CLOSE);
- busCollectionForm = new BusCollectionForm();
+ busCollectionForm = new BusCollectionForm(logger);
setContentPane(busCollectionForm.getMainPanel());
setDefaultLookAndFeelDecorated(false);
setPreferredSize(new Dimension(900, 500));
diff --git a/AccordionBus/Main.java b/AccordionBus/Main.java
index 29dfb70..99a9030 100644
--- a/AccordionBus/Main.java
+++ b/AccordionBus/Main.java
@@ -1,7 +1,10 @@
package AccordionBus;
+import org.apache.logging.log4j.*;
+
public class Main {
public static void main(String[] args) {
- new FrameBusCollection();
+ System.setProperty("log4j.configurationFile", "D:\\ULSTU\\Семестр 3\\РПП Java\\AccordionBus\\loggerSettings.xml");
+ new FrameBusCollection(LogManager.getLogger("logger"));
}
}
\ No newline at end of file
diff --git a/AccordionBus/SetGeneric.java b/AccordionBus/SetGeneric.java
index 53582dd..7e0019b 100644
--- a/AccordionBus/SetGeneric.java
+++ b/AccordionBus/SetGeneric.java
@@ -30,6 +30,10 @@ public class SetGeneric {
// Добавление объекта в набор на конкретную позицию
public int Insert(T bus, int position) {
+ if (_places.size() >= _maxCount) {
+ throw new StorageOverflowException(_maxCount);
+ }
+
// Проверка позиции
if (position < 0 || position >= _maxCount) {
return -1;
@@ -42,6 +46,10 @@ public class SetGeneric {
// Удаление объекта из набора с конкретной позиции
public boolean Remove(int position) {
+ if (position >= Count() && position < _maxCount) {
+ throw new BusNotFoundException(position);
+ }
+
// Проверка позиции
if (position < 0 || position >= _maxCount) {
return false;
@@ -59,6 +67,10 @@ public class SetGeneric {
// Получение объекта из набора по позиции
public T Get(int position) {
+ if (position >= Count() && position < _maxCount) {
+ throw new BusNotFoundException(position);
+ }
+
// Проверка позиции
if (position < 0 || position >= _maxCount) {
return null;
diff --git a/AccordionBus/StorageOverflowException.java b/AccordionBus/StorageOverflowException.java
new file mode 100644
index 0000000..d2e6976
--- /dev/null
+++ b/AccordionBus/StorageOverflowException.java
@@ -0,0 +1,20 @@
+package AccordionBus;
+
+import java.io.Serializable;
+
+public class StorageOverflowException extends RuntimeException implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ public StorageOverflowException(int count) {
+ super("В наборе превышено допустимое количество: " + count);
+ }
+ public StorageOverflowException() {
+ super();
+ }
+ public StorageOverflowException(String message) {
+ super(message);
+ }
+ public StorageOverflowException(String message, Throwable exception) {
+ super(message, exception);
+ }
+}
diff --git a/AccordionBus/loggerSettings.xml b/AccordionBus/loggerSettings.xml
new file mode 100644
index 0000000..8e4bb8a
--- /dev/null
+++ b/AccordionBus/loggerSettings.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+ %m (дата-%d{d.M.y}) %ex%n
+
+
+
+
+
+ %m (дата-%d{d.M.y}) %ex%n
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logInfo.log b/logInfo.log
new file mode 100644
index 0000000..9fb7930
--- /dev/null
+++ b/logInfo.log
@@ -0,0 +1,4 @@
+
+Загружены данные из файла: C:\Users\masen\OneDrive\Рабочий стол\data.txt (дата-5.12.2023)
+Удален объект: AccordionBus.DrawingBus@465525b9 (дата-5.12.2023)
+Добавлен объект: AccordionBus.DrawingBus@228f8e71 (дата-5.12.2023)
diff --git a/logWarnings.log b/logWarnings.log
new file mode 100644
index 0000000..e8fe70b
--- /dev/null
+++ b/logWarnings.log
@@ -0,0 +1,3 @@
+
+Не удалось добавить объект: В наборе превышено допустимое количество: 27 (дата-5.12.2023)
+Не удалось удалить объект: Не найден объект по позиции 26 (дата-5.12.2023)