diff --git a/.idea/java.iml b/.idea/java.iml
index b107a2d..e6e0748 100644
--- a/.idea/java.iml
+++ b/.idea/java.iml
@@ -7,5 +7,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ProjectElectricLocomotive/FormLocomotiveCollections.java b/ProjectElectricLocomotive/FormLocomotiveCollections.java
index d04c2ca..a2e2c7a 100644
--- a/ProjectElectricLocomotive/FormLocomotiveCollections.java
+++ b/ProjectElectricLocomotive/FormLocomotiveCollections.java
@@ -5,11 +5,13 @@ import javax.swing.event.ListSelectionEvent;
import javax.swing.filechooser.FileNameExtensionFilter;
import java.awt.*;
import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
import java.util.Stack;
-
-//готовая лаба 3
+import org.apache.logging.log4j.*;
public class FormLocomotiveCollections {
+ private final Logger _logger;
FormElectricLocomotive formElectricLocomotive;
FormLocomotiveConfig formLocomotiveConfig;
private JPanel MainPanel;
@@ -30,14 +32,18 @@ public class FormLocomotiveCollections {
FrameElectricLocomotive _frameRemovedLocomotives;
private Stack _stackRemoveObjects;
FrameDopClassParameters frameDopClassParameters;
+
public JPanel getPictureBoxCollections() {
return MainPanel;
}
public FormLocomotiveCollections() {
+
+ _logger = LogManager.getLogger("logger");
+
formElectricLocomotive = new FormElectricLocomotive();
formLocomotiveConfig = new FormLocomotiveConfig();
- _storage = new LocomotivesGenericStorage(400,300);
+ _storage = new LocomotivesGenericStorage(400, 300);
_stackRemoveObjects = new Stack<>();
listBoxStorage.addListSelectionListener(this::listBoxObjectsSelectedIndexChanged);
@@ -49,48 +55,60 @@ public class FormLocomotiveCollections {
"Где данные? Напиши хоть что-нибудь",
"Ошибка",
JOptionPane.INFORMATION_MESSAGE);
- return;
+ _logger.error("Не удалось добавить набор: " + NameStorage);
}
_storage.AddSet(NameStorage);
ReloadObjects();
Refresh();
+ _logger.info("Добавлен набор: " + NameStorage);
});
ButtonRemoveObject.addActionListener(e ->
{
if (listBoxStorage.getSelectedIndex() == -1) {
- return;
+ _logger.error("Не выбран набор для удаления");
}
JOptionPane.showMessageDialog(this.getPictureBoxCollections(), "Коллекция удалена", "Удаление", JOptionPane.INFORMATION_MESSAGE);
_storage.DelSet((String) listBoxStorage.getSelectedValue()); //ТУТ СТРИНГ ОБРАТИ ВНИМАНИЕ КАК-НИБУДЬ
ReloadObjects();
+ _logger.info("Удален набор: " + listBoxStorage.getSelectedValue());
});
ButtonAddLocomotive.addActionListener(e -> {
if (listBoxStorage.getSelectedIndex() == -1)
- return;
+ _logger.warn("Не выбрана коллекция для добавления объекта");
var obj = _storage.get(listBoxStorage.getSelectedValue().toString()); // ТУТ ЕЩЕ РАЗ - ОБРАТИ ВНИМАНИЕ НА СТРИНГ
if (obj == null) {
- return;
+ _logger.warn("Набор равен null");
}
FrameLocomotiveConfig frameLocomotiveConfig = new FrameLocomotiveConfig();
frameLocomotiveConfig.setVisible(true);
- frameLocomotiveConfig._formLocomotiveConfig.buttonOk.addActionListener(e2 ->{
+ frameLocomotiveConfig._formLocomotiveConfig.buttonOk.addActionListener(e2 -> {
frameLocomotiveConfig.dispose();
loco = frameLocomotiveConfig._formLocomotiveConfig._loco;
- if(loco != null){
- if (obj.AddOverload(loco)!= -1) {
- JOptionPane.showMessageDialog(getPictureBoxCollections(), "Объект добавлен");
- Refresh();
- } else {
- JOptionPane.showMessageDialog(getPictureBoxCollections(), "Не удалось добавить объект");
+ try {
+
+ if (loco != null) {
+ if (obj.AddOverload(loco) != -1) {
+ JOptionPane.showMessageDialog(getPictureBoxCollections(), "Объект добавлен");
+ Refresh();
+ } else {
+ JOptionPane.showMessageDialog(getPictureBoxCollections(), "Не удалось добавить объект");
+ }
}
+ frameLocomotiveConfig._formLocomotiveConfig.buttonClose.addActionListener(e3 -> {
+ frameLocomotiveConfig.dispose();
+ });
+ _logger.info("Добавлен локомотив");
+ } catch (LocoStorageOverflowException ex) {
+ JOptionPane.showMessageDialog(null, ex.getMessage());
+ _logger.warn("Не удалось добавить объект " + ex.getMessage());
+ }
+ catch (Exception ex){
+ _logger.fatal("фатальная ошибка");
}
});
- frameLocomotiveConfig._formLocomotiveConfig.buttonClose.addActionListener(e3 -> {
- frameLocomotiveConfig.dispose();
- });
});
ButtonCreateRandomLoco.addActionListener(e -> {
@@ -101,49 +119,30 @@ public class FormLocomotiveCollections {
ButtonRemoveLocomotive.addActionListener(e -> {
if (listBoxStorage.getSelectedIndex() == -1) {
- return;
+ _logger.warn("Не выбрана коллекция для удаления объекта");
}
var obj = _storage.get(listBoxStorage.getSelectedValue().toString());
if (obj == null) {
- return;
+ _logger.warn("Набор равен null");
}
- int pos;
- try {
- pos = Integer.parseInt(textFieldNumber.getText());
- } catch (NumberFormatException ex) {
- JOptionPane.showMessageDialog(this.getPictureBoxCollections(),
- "Неверное значение",
- "Ошибка",
- JOptionPane.ERROR_MESSAGE);
- return;
- }
- Object[] options = {"Да", "Нет"};
- int n = JOptionPane.showOptionDialog(this.getPictureBoxCollections(),
- "Удалить объект?",
- "Все серьезно",
- JOptionPane.YES_NO_OPTION,
- JOptionPane.QUESTION_MESSAGE,
- null,
- options,
- options[0]
- );
- if (n == 1) {
- return;
- }
- DrawingLocomotive removedPlane = obj.SubOverload(pos);
- if (removedPlane != null) {
- _stackRemoveObjects.push(removedPlane);
- Refresh();
+ int pos = Integer.parseInt(textFieldNumber.getText());
- JOptionPane.showMessageDialog(this.getPictureBoxCollections(),
- "Объект удален",
- "Успех",
- JOptionPane.INFORMATION_MESSAGE);
- } else {
- JOptionPane.showMessageDialog(this.getPictureBoxCollections(),
- "Не удалось удалить объект",
- "Ошибка",
- JOptionPane.ERROR_MESSAGE);
+ try {
+ DrawingLocomotive removedPlane = obj.SubOverload(pos);
+ _stackRemoveObjects.push(removedPlane);
+ Refresh();
+
+ JOptionPane.showMessageDialog(this.getPictureBoxCollections(),
+ "Объект удален",
+ "Успех",
+ JOptionPane.INFORMATION_MESSAGE);
+ _logger.info("Удален объект " + removedPlane);
+ } catch (LocoNotFoundException ex) {
+ JOptionPane.showMessageDialog(null, ex.getMessage());
+ _logger.warn("Не удалось удалить объект" + ex.getMessage());
+ }
+ catch (Exception ex){
+ _logger.fatal("фатальная ошибка");
}
});
@@ -152,7 +151,7 @@ public class FormLocomotiveCollections {
});
Button_OpenFormRemovedLocomotives.addActionListener(e -> {
- if(_stackRemoveObjects.empty()) {
+ if (_stackRemoveObjects.empty()) {
JOptionPane.showMessageDialog(this.getPictureBoxCollections(),
"Вы ничего не удалили, кажется...",
"ой",
@@ -178,10 +177,19 @@ public class FormLocomotiveCollections {
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 {
+ if (_storage.LoadData(selectedFile.getAbsolutePath())) {
+ JOptionPane.showMessageDialog(null, "Загрузка прошла успешно", "Результат", JOptionPane.INFORMATION_MESSAGE);
+ } else {
+ JOptionPane.showMessageDialog(null, "Не загрузилось", "Результат", JOptionPane.ERROR_MESSAGE);
+ }
+ _logger.info("Загружено из файла: " + selectedFile.getAbsolutePath());
+ } catch (FileNotFoundException ex) {
+ JOptionPane.showMessageDialog(null, "Ошибка при загрузке всех объектов " + ex.getMessage(), "Результат", JOptionPane.ERROR_MESSAGE);
+ _logger.error("Не удалось загрузить объекты из файла: " + selectedFile.getAbsolutePath());
+ }
+ catch (Exception ex){
+ _logger.fatal("фатальная ошибка");
}
}
ReloadObjects();
@@ -195,10 +203,15 @@ public class FormLocomotiveCollections {
fileChooser.setFileFilter(new FileNameExtensionFilter("Текстовые файлы (*.txt)", "txt"));
if (fileChooser.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) {
File selectedFile = fileChooser.getSelectedFile();
- if (_storage.SaveData(selectedFile.getAbsolutePath()))
+ try {
+ _storage.SaveData(selectedFile.getAbsolutePath());
JOptionPane.showMessageDialog(null, "Сохранение прошло успешно", "Результат", JOptionPane.INFORMATION_MESSAGE);
- else
- JOptionPane.showMessageDialog(null, "Не сохранилось", "Результат", JOptionPane.ERROR_MESSAGE);
+ _logger.info("Сохранено в файл: " + selectedFile.getAbsolutePath());
+ } catch (Exception ex) {
+ JOptionPane.showMessageDialog(null, "Ошибка при сохранении всех объектов " + ex.getMessage(), "Результат", JOptionPane.ERROR_MESSAGE);
+ _logger.error("Не удалось сохранить объекты в файл: " + selectedFile.getAbsolutePath());
+ }
+
}
}
);
@@ -210,10 +223,16 @@ public class FormLocomotiveCollections {
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);
+ try {
+ if (_storage.LoadDataSingle(selectedFile.getAbsolutePath())) {
+ JOptionPane.showMessageDialog(null, "Загрузка прошла успешно", "Результат", JOptionPane.INFORMATION_MESSAGE);
+ _logger.info("Загружен файл с коллекцией: " + selectedFile.getAbsolutePath());
+ } else {
+ JOptionPane.showMessageDialog(null, "Не загрузилось", "Результат", JOptionPane.ERROR_MESSAGE);
+ }
+ } catch (IOException ex) {
+ JOptionPane.showMessageDialog(null, "Ошибка при загрузке коллекции " + ex.getMessage(), "Результат", JOptionPane.ERROR_MESSAGE);
+ _logger.error("Не удалось загрузить коллекцию из файла: " + selectedFile.getAbsolutePath());
}
}
ReloadObjects();
@@ -231,10 +250,15 @@ public class FormLocomotiveCollections {
fileChooser.setDialogTitle("Выберите файл для сохранения данных");
if (fileChooser.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) {
File selectedFile = fileChooser.getSelectedFile();
- if (_storage.SaveDataSingle(selectedFile.getAbsolutePath(), (String) listBoxStorage.getSelectedValue()))
+ try {
+ _storage.SaveDataSingle(selectedFile.getAbsolutePath(), (String) listBoxStorage.getSelectedValue());
JOptionPane.showMessageDialog(null, "Сохранение прошло успешно", "Результат", JOptionPane.INFORMATION_MESSAGE);
- else
- JOptionPane.showMessageDialog(null, "Не сохранилось", "Результат", JOptionPane.ERROR_MESSAGE);
+ _logger.info("Сохранена коллекция в файл: " + selectedFile.getAbsolutePath());
+ } catch (Exception ex) {
+ JOptionPane.showMessageDialog(null, "Ошибка при сохранении коллекции " + ex.getMessage(), "Результат", JOptionPane.ERROR_MESSAGE);
+ _logger.error("Не удалось сохранить коллекцию в файл: " + selectedFile.getAbsolutePath());
+ }
+
}
}
);
diff --git a/ProjectElectricLocomotive/LocoNotFoundException.java b/ProjectElectricLocomotive/LocoNotFoundException.java
new file mode 100644
index 0000000..e790b79
--- /dev/null
+++ b/ProjectElectricLocomotive/LocoNotFoundException.java
@@ -0,0 +1,22 @@
+package ProjectElectricLocomotive;
+
+import java.io.Serializable;
+
+//create lab 7
+public class LocoNotFoundException extends RuntimeException implements Serializable {
+ public LocoNotFoundException(int i) {
+ super("Не найден объект по позиции " + i);
+ }
+
+ public LocoNotFoundException(Throwable ex) {
+ super(ex);
+ }
+
+ public LocoNotFoundException(String message) {
+ super(message);
+ }
+
+ public LocoNotFoundException(String message, Throwable ex) { //Throwable люди пишут, посмотри внимательно
+ super(message, ex);
+ }
+}
diff --git a/ProjectElectricLocomotive/LocoStorageOverflowException.java b/ProjectElectricLocomotive/LocoStorageOverflowException.java
new file mode 100644
index 0000000..25c7850
--- /dev/null
+++ b/ProjectElectricLocomotive/LocoStorageOverflowException.java
@@ -0,0 +1,19 @@
+package ProjectElectricLocomotive;
+
+import java.io.Serializable;
+
+public class LocoStorageOverflowException extends RuntimeException implements Serializable {
+ public LocoStorageOverflowException(Throwable ex){
+ super(ex);
+ }
+ public LocoStorageOverflowException(int count){
+ super("В наборе превышено допустимое количество локомотивов: " + count);
+ }
+ public LocoStorageOverflowException(String message){
+ super(message);
+ }
+ public LocoStorageOverflowException(String message, Throwable ex){
+ super(message, ex);
+ }
+
+}
diff --git a/ProjectElectricLocomotive/LocomotiveGenericCollection.java b/ProjectElectricLocomotive/LocomotiveGenericCollection.java
index e58fc66..2b294d4 100644
--- a/ProjectElectricLocomotive/LocomotiveGenericCollection.java
+++ b/ProjectElectricLocomotive/LocomotiveGenericCollection.java
@@ -44,6 +44,9 @@ public class LocomotiveGenericCollection collection;
if (_locomotiveStorage.containsKey(key)){
collection = _locomotiveStorage.get(key);
@@ -115,7 +120,7 @@ public class LocomotivesGenericStorage {
_pictureHeight
);
if (plane == null || collection.AddOverload(plane) == -1)
- return false;
+ throw new NoSuchElementException("Не найден объект");
}
_locomotiveStorage.put(key, collection);
} catch (IOException e) {
@@ -138,7 +143,7 @@ public class LocomotivesGenericStorage {
data.append(record.getKey()).append(_separatorForKeyValue).append(records).append("\n");
}
if (data.isEmpty()) {
- return false;
+ throw new InvalidStreamException("Нет данных для сохранения");
}
try (BufferedWriter writer = new BufferedWriter(new FileWriter(filename))) {
writer.write(_keyword + System.lineSeparator() + data);
@@ -148,18 +153,18 @@ public class LocomotivesGenericStorage {
return true;
}
- public boolean LoadData(String filename) {
+ public boolean LoadData(String filename) throws FileNotFoundException {
var file = new File(filename);
if (!file.exists()) {
- return false;
+ throw new FileNotFoundException("Файл не найден");
}
try (BufferedReader reader = new BufferedReader(new FileReader(filename))) {
String s = reader.readLine();
if (s == null || s.isEmpty())
- return false;
+ throw new NullPointerException("Нет данных для загрузки");
if (!s.startsWith(_keyword)) {
- return false;
+ throw new IllegalArgumentException("Неверный формат данных");
}
_locomotiveStorage.clear();
s = reader.readLine();
@@ -180,7 +185,7 @@ public class LocomotivesGenericStorage {
_pictureWidth, _pictureHeight
);
if (plane == null || collection.AddOverload(plane) == -1)
- return false;
+ throw new NoSuchElementException("Не найден объект");
}
_locomotiveStorage.put(record[0], collection);
}
diff --git a/ProjectElectricLocomotive/Main.java b/ProjectElectricLocomotive/Main.java
index 7f88444..98f9430 100644
--- a/ProjectElectricLocomotive/Main.java
+++ b/ProjectElectricLocomotive/Main.java
@@ -3,6 +3,7 @@ package ProjectElectricLocomotive;
public class Main {
public static void main(String[] args)
{
- FrameLocomotiveCollection mainFrame = new FrameLocomotiveCollection();
+ System.setProperty("log4j.configurationFile", "C:\\code\\java\\ProjectElectricLocomotive\\loggerFile.xml");
+ new FrameLocomotiveCollection();
}
}
diff --git a/ProjectElectricLocomotive/SetGeneric.java b/ProjectElectricLocomotive/SetGeneric.java
index 062252a..b822639 100644
--- a/ProjectElectricLocomotive/SetGeneric.java
+++ b/ProjectElectricLocomotive/SetGeneric.java
@@ -25,8 +25,10 @@ public class SetGeneric{
public int Insert(T loco, int position)
{
- if(position < 0 || position > maxCount)
+ if(position < 0)
return -1;
+ if(_places.size() >= maxCount)
+ throw new LocoStorageOverflowException(maxCount);
else
{
_places.add(position, loco);
@@ -41,6 +43,8 @@ public class SetGeneric{
else
{
T plane = _places.get(position);
+ if(plane == null)
+ throw new LocoNotFoundException(position);
_places.set(position, null);
return plane;
}
diff --git a/ProjectElectricLocomotive/loggerFile.xml b/ProjectElectricLocomotive/loggerFile.xml
new file mode 100644
index 0000000..05dc958
--- /dev/null
+++ b/ProjectElectricLocomotive/loggerFile.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