From aad872a57ac82673e5cb1903fc3a4ce06d6e4e49 Mon Sep 17 00:00:00 2001 From: MaxKarme <91691525+MaxKarme@users.noreply.github.com> Date: Thu, 15 Dec 2022 13:54:34 +0300 Subject: [PATCH 1/2] part 1 --- .gitignore | 3 +- FormMapWithSetAircrafts.java | 94 ++++++++++++---- Main.java | 6 +- MapWithSetAircraftsGeneric.java | 6 +- MapsCollection.java | 188 ++++++++++++++------------------ SetAircraftsGeneric.java | 14 ++- log4j2.xml | 25 +++++ 7 files changed, 195 insertions(+), 141 deletions(-) create mode 100644 log4j2.xml diff --git a/.gitignore b/.gitignore index fca352e..7d1cff2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ .idea -out \ No newline at end of file +out +logs \ No newline at end of file diff --git a/FormMapWithSetAircrafts.java b/FormMapWithSetAircrafts.java index 30c2f1f..76cbb75 100644 --- a/FormMapWithSetAircrafts.java +++ b/FormMapWithSetAircrafts.java @@ -3,6 +3,7 @@ import javax.swing.filechooser.FileNameExtensionFilter; import java.awt.*; import java.util.*; import java.util.List; +import org.apache.logging.log4j.*; public class FormMapWithSetAircrafts implements Form { private JPanel MainPane; @@ -33,9 +34,16 @@ public class FormMapWithSetAircrafts implements Form { private Canvas canv = new Canvas(this); private Queue<IDrawingObject> deletedAircrafts = new ArrayDeque<>(); + JFrame jFrame = getFrame(); Image img; + private Logger _logger; + + public FormMapWithSetAircrafts(Logger logger) { + _logger = logger; + } + private JFrame getFrame() { JFrame frame = new JFrame(); frame.setVisible(true); @@ -90,10 +98,14 @@ public class FormMapWithSetAircrafts implements Form { String path = chooser.getSelectedFile().getAbsolutePath(); - if(_mapsCollection.SaveData(path)) { + try { + _mapsCollection.SaveData(path); + _logger.info("Данные сохранены в файл " + chooser.getSelectedFile().getAbsolutePath()); JOptionPane.showMessageDialog(jFrame, "Сохранение прошло успешно"); - } else JOptionPane.showMessageDialog(jFrame, "Не сохранилось"); - + } catch (Exception err) { + _logger.error("Ошибка сохранения данных: " + err.getMessage()); + JOptionPane.showMessageDialog(jFrame, "Не сохранилось"); + } }); loadItem.addActionListener(e -> { @@ -104,10 +116,16 @@ public class FormMapWithSetAircrafts implements Form { if(chooser.getSelectedFile() == null) return; String path = chooser.getSelectedFile().getAbsolutePath(); - if(_mapsCollection.LoadData(path)) { + + try { + _mapsCollection.LoadData(path); + _logger.info("Данные из загружены из файла " + chooser.getSelectedFile().getAbsolutePath()); JOptionPane.showMessageDialog(jFrame, "Загрузка прошла успешно"); ReloadMaps(); - } else JOptionPane.showMessageDialog(jFrame, "Не загрузилось"); + } catch (Exception err) { + _logger.error("Ошибка загрузки данных " + chooser.getSelectedFile().getAbsolutePath()); + JOptionPane.showMessageDialog(jFrame, "Не загрузилось"); + } }); saveMapItem.addActionListener(e -> { @@ -122,10 +140,16 @@ public class FormMapWithSetAircrafts implements Form { String path = chooser.getSelectedFile().getAbsolutePath(); - if(_mapsCollection.SaveMap(path, listBoxMaps.getSelectedValue().toString())) { + try { + _mapsCollection.SaveMap(path, listBoxMaps.getSelectedValue().toString()); + _logger.info("Карта " + listBoxMaps.getSelectedValue().toString() + + " сохранена в файл " + chooser.getSelectedFile().getAbsolutePath()); JOptionPane.showMessageDialog(jFrame, "Сохранение прошло успешно"); - } else JOptionPane.showMessageDialog(jFrame, "Не сохранилось"); - + } catch (Exception err) { + _logger.error("Ошибка сохранения карты " + listBoxMaps.getSelectedValue().toString() + + " в файл " + chooser.getSelectedFile().getAbsolutePath()); + JOptionPane.showMessageDialog(jFrame, "Не сохранилось"); + } }); loadMapItem.addActionListener(e -> { @@ -136,10 +160,18 @@ public class FormMapWithSetAircrafts implements Form { if(chooser.getSelectedFile() == null) return; String path = chooser.getSelectedFile().getAbsolutePath(); - if(_mapsCollection.LoadMap(path)) { + + try { + _mapsCollection.LoadMap(path); + _logger.info("Карта " + listBoxMaps.getSelectedValue().toString() + + " загружена из файла " + chooser.getSelectedFile().getAbsolutePath()); JOptionPane.showMessageDialog(jFrame, "Загрузка прошла успешно"); ReloadMaps(); - } else JOptionPane.showMessageDialog(jFrame, "Не загрузилось"); + } catch (Exception err) { + _logger.error("Ошибка загрузки карты " + listBoxMaps.getSelectedValue().toString() + + " из файла " + chooser.getSelectedFile().getAbsolutePath()); + JOptionPane.showMessageDialog(jFrame, "Не загрузилось"); + } }); _mapsCollection = new MapsCollection(canv.getSize().width, canv.getSize().height); @@ -154,22 +186,27 @@ public class FormMapWithSetAircrafts implements Form { listBoxMaps.addListSelectionListener(e -> { if(listBoxMaps.getSelectedValue() == null) return; img = _mapsCollection.getMap(listBoxMaps.getSelectedValue().toString()).ShowSet(); + _logger.info("Переход на карту " + listBoxMaps.getSelectedValue().toString()); canv.repaint(); }); buttonAddMap.addActionListener(e -> { if (comboBoxSelectorMap.getSelectedIndex() == -1 || textBoxNewMapName.getText() == "") { + _logger.warn("Не получилось добавить карту: не все данные заполнены"); JOptionPane.showMessageDialog(jFrame, "Не все данные заполнены"); return; } if (!_mapsDict.containsKey(comboBoxSelectorMap.getSelectedItem().toString())) { + _logger.warn("Не получилось добавить карту: нет такой карты"); JOptionPane.showMessageDialog(jFrame, "Нет такой карты"); return; } _mapsCollection.AddMap(textBoxNewMapName.getText(), _mapsDict.get(comboBoxSelectorMap.getSelectedItem().toString())); + + _logger.info("Добавлена карта " + textBoxNewMapName.getText()); ReloadMaps(); }); @@ -184,6 +221,7 @@ public class FormMapWithSetAircrafts implements Form { "Удаление", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) { _mapsCollection.DelMap(mapName); + _logger.info("Удалена карта " + mapName); ReloadMaps(); } }); @@ -200,17 +238,21 @@ public class FormMapWithSetAircrafts implements Form { formConfig.addListener(drawingAircraft -> { if(drawingAircraft == null) return; - DrawingObjectAircraft aircraft = new DrawingObjectAircraft(drawingAircraft); - if (_mapsCollection.getMap(listBoxMaps.getSelectedValue().toString()).addAircraft(aircraft) != -1) - { + try { + DrawingObjectAircraft aircraft = new DrawingObjectAircraft(drawingAircraft); + _mapsCollection.getMap(listBoxMaps.getSelectedValue().toString()).addAircraft(aircraft); + + _logger.info("Добавлен новый объект"); JOptionPane.showMessageDialog(jFrame, "Объект добавлен"); img = _mapsCollection.getMap(listBoxMaps.getSelectedValue().toString()).ShowSet(); canv.repaint(); + } catch(StorageOverflowException err) { + _logger.warn("Ошибка добавления: " + err.getMessage()); + JOptionPane.showMessageDialog(jFrame, "Ошибка переполнения: " + err.getMessage()); + } catch(Exception err) { + _logger.fatal("Незивестная ошибка: " + err.getMessage()); } - else - { - JOptionPane.showMessageDialog(jFrame, "Не удалось добавить объект"); - } + }); }); @@ -233,15 +275,20 @@ public class FormMapWithSetAircrafts implements Form { pos = Integer.parseInt(text); String mapName = listBoxMaps.getSelectedValue().toString(); - IDrawingObject deleted = _mapsCollection.getMap(mapName).removeAircraft(pos); - if(deleted != null) { + try { + IDrawingObject deleted = _mapsCollection.getMap(mapName).removeAircraft(pos); + _logger.info("Объект удален"); JOptionPane.showMessageDialog(jFrame, "Объект удален"); img = _mapsCollection.getMap(mapName).ShowSet(); deletedAircrafts.add(deleted); canv.repaint(); - } else { - JOptionPane.showMessageDialog(jFrame, "Не удалось удалить объект"); + } catch(AircraftNotFoundException err) { + _logger.warn("Ошибка добавления: " + err.getMessage()); + JOptionPane.showMessageDialog(jFrame, "Ошибка удаления: " + err.getMessage()); + } catch (Exception err) { + _logger.fatal("Неизвестная ошибка: " + err.getMessage()); + JOptionPane.showMessageDialog(jFrame, "Неизвестная ошибка: " + err.getMessage()); } }); @@ -249,6 +296,7 @@ public class FormMapWithSetAircrafts implements Form { if(listBoxMaps.getSelectedValue() == null) return; img = _mapsCollection.getMap(listBoxMaps.getSelectedValue().toString()).ShowSet(); + _logger.info("Показ хранилища"); canv.repaint(); }); @@ -256,6 +304,7 @@ public class FormMapWithSetAircrafts implements Form { if(listBoxMaps.getSelectedValue() == null) return; img = _mapsCollection.getMap(listBoxMaps.getSelectedValue().toString()).ShowOnMap(); + _logger.info("Показ карты"); canv.repaint(); }); @@ -267,6 +316,7 @@ public class FormMapWithSetAircrafts implements Form { if(deletedAircrafts.size() == 0) { JOptionPane.showMessageDialog(jFrame, "Очередь пуста"); + _logger.warn("Очередь удаленных объектов пуста"); return; } @@ -280,6 +330,8 @@ public class FormMapWithSetAircrafts implements Form { dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); dialog.setVisible(true); + + _logger.info("Показ удаленного объекта"); }); leftButton.addActionListener(e -> { diff --git a/Main.java b/Main.java index 36c5cc4..8b23885 100644 --- a/Main.java +++ b/Main.java @@ -1,5 +1,7 @@ +import org.apache.logging.log4j.*; + public class Main { public static void main(String[] args) { - new FormMapWithSetAircrafts().run(); + new FormMapWithSetAircrafts(LogManager.getLogger(Main.class)).run(); } -} +} \ No newline at end of file diff --git a/MapWithSetAircraftsGeneric.java b/MapWithSetAircraftsGeneric.java index 6a437cf..0b401f0 100644 --- a/MapWithSetAircraftsGeneric.java +++ b/MapWithSetAircraftsGeneric.java @@ -40,19 +40,19 @@ public class MapWithSetAircraftsGeneric<T extends IDrawingObject, U extends Abst _setAircrafts.Clear(); } - public void LoadData(String[] records) { + public void LoadData(String[] records) throws StorageOverflowException { for (String rec : records) { _setAircrafts.Insert((T)DrawingObjectAircraft.Create(rec)); } } - public int addAircraft(T aircraft) + public int addAircraft(T aircraft) throws StorageOverflowException { return _setAircrafts.Insert(aircraft); } - public T removeAircraft(int position) + public T removeAircraft(int position) throws AircraftNotFoundException { return _setAircrafts.Remove(position); } diff --git a/MapsCollection.java b/MapsCollection.java index 86b5bb2..7cf200e 100644 --- a/MapsCollection.java +++ b/MapsCollection.java @@ -1,10 +1,8 @@ -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; +import java.io.*; import java.util.LinkedHashMap; import java.util.List; import java.util.ListIterator; +import java.util.zip.DataFormatException; public class MapsCollection { @@ -24,112 +22,40 @@ public class MapsCollection _pictureHeight = pictureHeight; } - public boolean SaveData(String filename) + public void SaveData(String filename) throws IOException { File file = new File(filename); if (file.exists()) file.delete(); - try { - file.createNewFile(); + file.createNewFile(); - FileWriter writer = new FileWriter(file); - writer.append("MapsCollection\n"); + FileWriter writer = new FileWriter(file); + writer.append("MapsCollection\n"); - for(String key : _mapStorages.keySet()) { - String record = key + separatorDict + _mapStorages.get(key).GetData(separatorDict, separatorData) + "\n"; - writer.append(record); - } - - writer.flush(); - writer.close(); - } catch(Exception err) { - return false; + for(String key : _mapStorages.keySet()) { + String record = key + separatorDict + _mapStorages.get(key).GetData(separatorDict, separatorData) + "\n"; + writer.append(record); } - return true; + writer.flush(); + writer.close(); } - public boolean LoadData(String filename) - { + public void LoadData(String filename) throws IOException, DataFormatException { File file = new File(filename); - if (!file.exists()) return false; + if (!file.exists()) throw new FileNotFoundException("Файл не найден"); - try { - BufferedReader reader = new BufferedReader(new FileReader(file)); - String current = reader.readLine(); + BufferedReader reader = new BufferedReader(new FileReader(file)); + String current = reader.readLine(); - if (!current.equals("MapsCollection")) return false; - _mapStorages.clear(); - - while ((current = reader.readLine()) != null) - { - String elem[] = current.split("\\" + separatorDict); - AbstractMap map = null; - switch (elem[1]) - { - case "SimpleMap": - map = new SimpleMap(); - break; - case "MyMap": - map = new MyMap(); - break; - } - _mapStorages.put(elem[0], new MapWithSetAircraftsGeneric<DrawingObjectAircraft, AbstractMap>(_pictureWidth, _pictureHeight, map)); - _mapStorages.get(elem[0]).LoadData(elem[2].split(separatorData + "")); - } - - reader.close(); - } catch(Exception err) { - return false; - } - - return true; - } - - - public boolean SaveMap(String filename, String key) { - File file = new File(filename); - if(file.exists()) file.delete(); - - MapWithSetAircraftsGeneric<DrawingObjectAircraft, AbstractMap> item = _mapStorages.getOrDefault(key, null); - if(item == null) return false; - - try { - file.createNewFile(); - FileWriter writer = new FileWriter(file); - - writer.append("Map\n"); - writer.append(key + "\n"); - writer.append(item.getMap().getClass().getName() + "\n"); - ListIterator<DrawingObjectAircraft> iter = item.getAircraftsIter(); - while(iter.hasNext()) { - writer.append(AircraftFactory.getDataForSave(iter.next().getAircraft()) + "\n"); - } - - writer.flush(); - writer.close(); - } catch(Exception err) { - return false; - } - - return true; - } - - public boolean LoadMap(String filename) { - File file = new File(filename); - if (!file.exists()) return false; - - try { - BufferedReader reader = new BufferedReader(new FileReader(file)); - String format = reader.readLine(); - if (!format.equals("Map")) return false; - - String key = reader.readLine(); - String mapStr = reader.readLine(); + if (!current.equals("MapsCollection")) throw new DataFormatException("Неверный формат данных"); + _mapStorages.clear(); + while ((current = reader.readLine()) != null) + { + String elem[] = current.split("\\" + separatorDict); AbstractMap map = null; - - switch (mapStr) + switch (elem[1]) { case "SimpleMap": map = new SimpleMap(); @@ -138,21 +64,67 @@ public class MapsCollection map = new MyMap(); break; } - - if(_mapStorages.containsKey(key)) _mapStorages.get(key).ClearMap(); - else _mapStorages.put(key, new MapWithSetAircraftsGeneric<>(_pictureWidth, _pictureHeight, map)); - - String current = null; - while ((current = reader.readLine()) != null) - { - _mapStorages.get(key).addAircraft(DrawingObjectAircraft.Create(current)); - } - reader.close(); - } catch(Exception err) { - return false; + _mapStorages.put(elem[0], new MapWithSetAircraftsGeneric<DrawingObjectAircraft, AbstractMap>(_pictureWidth, _pictureHeight, map)); + _mapStorages.get(elem[0]).LoadData(elem[2].split(separatorData + "")); } - return true; + reader.close(); + } + + + public void SaveMap(String filename, String key) throws IOException { + File file = new File(filename); + if(file.exists()) file.delete(); + + MapWithSetAircraftsGeneric<DrawingObjectAircraft, AbstractMap> item = _mapStorages.get(key); + file.createNewFile(); + FileWriter writer = new FileWriter(file); + + writer.append("Map\n"); + writer.append(key + "\n"); + writer.append(item.getMap().getClass().getName() + "\n"); + ListIterator<DrawingObjectAircraft> iter = item.getAircraftsIter(); + + while(iter.hasNext()) { + writer.append(AircraftFactory.getDataForSave(iter.next().getAircraft()) + "\n"); + } + + writer.flush(); + writer.close(); + } + + public void LoadMap(String filename) throws IOException, DataFormatException { + File file = new File(filename); + if (!file.exists()) throw new FileNotFoundException("Файл не найден"); + + BufferedReader reader = new BufferedReader(new FileReader(file)); + String format = reader.readLine(); + if (!format.equals("Map")) throw new DataFormatException("Неверный формат данных"); + + String key = reader.readLine(); + String mapStr = reader.readLine(); + + AbstractMap map = null; + + switch (mapStr) + { + case "SimpleMap": + map = new SimpleMap(); + break; + case "MyMap": + map = new MyMap(); + break; + } + + if(_mapStorages.containsKey(key)) _mapStorages.get(key).ClearMap(); + else _mapStorages.put(key, new MapWithSetAircraftsGeneric<>(_pictureWidth, _pictureHeight, map)); + + String current = null; + while ((current = reader.readLine()) != null) + { + _mapStorages.get(key).addAircraft(DrawingObjectAircraft.Create(current)); + } + reader.close(); } public void AddMap(String name, AbstractMap map) diff --git a/SetAircraftsGeneric.java b/SetAircraftsGeneric.java index 86d854f..0f6a5ca 100644 --- a/SetAircraftsGeneric.java +++ b/SetAircraftsGeneric.java @@ -14,24 +14,26 @@ public class SetAircraftsGeneric<T> _places = new ArrayList<>(); _maxCount = count; } - public int Insert(T aircraft) + public int Insert(T aircraft) throws StorageOverflowException { - if (_places.size() == _maxCount) return -1; + if (_places.size() == _maxCount) throw new StorageOverflowException(_maxCount); _places.add(0, aircraft); return 0; } - public int Insert(T aircraft, int position) + public int Insert(T aircraft, int position) throws StorageOverflowException { - if (_places.size() == _maxCount) return -1; + if (_places.size() == _maxCount) throw new StorageOverflowException(_maxCount); _places.add(position, aircraft); return position; } - public T Remove(int position) + public T Remove(int position) throws AircraftNotFoundException { - if(position > _maxCount || position < 0) return null; + if(position > _places.size() || position < 0) throw new AircraftNotFoundException(position); T res = _places.get(position); _places.remove(res); + + if(res == null) throw new AircraftNotFoundException(position); return res; } diff --git a/log4j2.xml b/log4j2.xml new file mode 100644 index 0000000..8dc02cd --- /dev/null +++ b/log4j2.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Configuration status="info" > + <Appenders> + <File name="error" fileName="logs/error.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="logs/info.log" append="true"> + <PatternLayout> + <Pattern>%-5level %msg (%d{dd.MM.yyyy})%n</Pattern> + </PatternLayout> + <ThresholdFilter level="WARN" onMatch="DENY" onMismatch="ACCEPT"/> + </File> + </Appenders> + + <Loggers> + <Root level="INFO"> + <AppenderRef ref="info" /> + <AppenderRef ref="error" /> + </Root> + </Loggers> + +</Configuration> \ No newline at end of file -- 2.25.1 From 87ecc3a66636f232ee0e77eb35920930a508cef2 Mon Sep 17 00:00:00 2001 From: MaxKarme <91691525+MaxKarme@users.noreply.github.com> Date: Thu, 15 Dec 2022 13:56:38 +0300 Subject: [PATCH 2/2] part 2 --- AircraftNotFoundException.java | 15 +++++++++++++++ StorageOverflowException.java | 15 +++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 AircraftNotFoundException.java create mode 100644 StorageOverflowException.java diff --git a/AircraftNotFoundException.java b/AircraftNotFoundException.java new file mode 100644 index 0000000..d5b5558 --- /dev/null +++ b/AircraftNotFoundException.java @@ -0,0 +1,15 @@ +class AircraftNotFoundException extends RuntimeException +{ + public AircraftNotFoundException(int i) { + super("Не найден объект по позиции " + i); + } + public AircraftNotFoundException() { + super(); + } + public AircraftNotFoundException(String message) { + super(message); + } + public AircraftNotFoundException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/StorageOverflowException.java b/StorageOverflowException.java new file mode 100644 index 0000000..4794fe4 --- /dev/null +++ b/StorageOverflowException.java @@ -0,0 +1,15 @@ +class StorageOverflowException extends RuntimeException +{ + public StorageOverflowException(int count) { + super("В наборе превышено допустимое количество: " + count); + } + public StorageOverflowException() { + super(); + } + public StorageOverflowException(String message) { + super(message); + } + public StorageOverflowException(String message, Throwable cause) { + super(message, cause); + } +} -- 2.25.1