From ba418fb2555d9a97bb5434a9eb79e94eabc87201 Mon Sep 17 00:00:00 2001 From: Factorino73 Date: Tue, 5 Dec 2023 12:58:41 +0400 Subject: [PATCH] PIbd-21_MasenkinMS_LabWork07 --- .idea/РПП Java.iml | 18 ++++ AccordionBus/BusCollectionForm.form | 14 ++- AccordionBus/BusCollectionForm.java | 104 +++++++++++++++------ AccordionBus/BusGenericStorage.java | 31 +++--- AccordionBus/BusNotFoundException.java | 20 ++++ AccordionBus/FrameBusCollection.java | 6 +- AccordionBus/Main.java | 5 +- AccordionBus/SetGeneric.java | 12 +++ AccordionBus/StorageOverflowException.java | 20 ++++ AccordionBus/loggerSettings.xml | 32 +++++++ logInfo.log | 4 + logWarnings.log | 3 + 12 files changed, 221 insertions(+), 48 deletions(-) create mode 100644 AccordionBus/BusNotFoundException.java create mode 100644 AccordionBus/StorageOverflowException.java create mode 100644 AccordionBus/loggerSettings.xml create mode 100644 logInfo.log create mode 100644 logWarnings.log 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)