Compare commits

..

No commits in common. "7839cb7aadfa45e18d2fd01be8644fdb6eefdd5a" and "60bc67a8f509e534890a5a3739081e0720f1c61b" have entirely different histories.

4 changed files with 67 additions and 114 deletions

View File

@ -1,5 +1,3 @@
import org.apache.logging.log4j.Logger;
import javax.swing.*; import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter; import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.text.DefaultFormatterFactory; import javax.swing.text.DefaultFormatterFactory;
@ -43,13 +41,6 @@ public class FormMapWithSetArtilleries extends JFrame {
private final MapsCollection _mapsCollection; private final MapsCollection _mapsCollection;
private final Stack<IDrawingObject> deletedObjects = new Stack<>(); private final Stack<IDrawingObject> deletedObjects = new Stack<>();
private Logger logger;
public FormMapWithSetArtilleries(Logger logger) {
this();
this.logger = logger;
}
public FormMapWithSetArtilleries() { public FormMapWithSetArtilleries() {
this.setTitle("Artillery"); this.setTitle("Artillery");
this.setContentPane(paneArtilleries); this.setContentPane(paneArtilleries);
@ -76,13 +67,13 @@ public class FormMapWithSetArtilleries extends JFrame {
dialog.showSaveDialog(this); dialog.showSaveDialog(this);
try { try {
_mapsCollection.saveData(dialog.getSelectedFile().getAbsolutePath()); if (_mapsCollection.saveData(dialog.getSelectedFile().getAbsolutePath())) {
logger.info("Сохранение в файл \"" + dialog.getSelectedFile().getAbsolutePath() + "\""); JOptionPane.showMessageDialog(this, "Сохранение прошло успешно", "Успех", JOptionPane.INFORMATION_MESSAGE);
JOptionPane.showMessageDialog(this, "Сохранение прошло успешно", "Успех", JOptionPane.INFORMATION_MESSAGE); } else {
JOptionPane.showMessageDialog(this, "Не сохранилось", "Провал", JOptionPane.INFORMATION_MESSAGE);
} catch (Exception ex) { }
logger.error("Ошибка сохранения в файл: " + ex.getMessage()); } catch (IOException ex) {
JOptionPane.showMessageDialog(this, "Не сохранилось: " + ex.getMessage(), "Провал", JOptionPane.INFORMATION_MESSAGE); ex.printStackTrace();
} }
}); });
fileMenu.add(saveMenuItem); fileMenu.add(saveMenuItem);
@ -94,13 +85,14 @@ public class FormMapWithSetArtilleries extends JFrame {
dialog.showOpenDialog(this); dialog.showOpenDialog(this);
try { try {
_mapsCollection.loadData(dialog.getSelectedFile().getAbsolutePath()); if (_mapsCollection.loadData(dialog.getSelectedFile().getAbsolutePath())) {
reloadMaps(); reloadMaps();
logger.info("Загрузка из файла \"" + dialog.getSelectedFile().getAbsolutePath() + "\""); JOptionPane.showMessageDialog(this, "Загрузка прошла успешно", "Успех", JOptionPane.INFORMATION_MESSAGE);
JOptionPane.showMessageDialog(this, "Загрузка прошла успешно", "Успех", JOptionPane.INFORMATION_MESSAGE); } else {
} catch (Exception ex) { JOptionPane.showMessageDialog(this, "Не загрузилось", "Провал", JOptionPane.INFORMATION_MESSAGE);
logger.error("Ошибка загрузки из файла: " + ex.getMessage()); }
JOptionPane.showMessageDialog(this, "Не загрузилось: " + ex.getMessage(), "Провал", JOptionPane.INFORMATION_MESSAGE); } catch (IOException ex) {
ex.printStackTrace();
} }
}); });
fileMenu.add(loadMenuItem); fileMenu.add(loadMenuItem);
@ -112,12 +104,13 @@ public class FormMapWithSetArtilleries extends JFrame {
dialog.showSaveDialog(this); dialog.showSaveDialog(this);
try { try {
_mapsCollection.saveMap(Optional.ofNullable(listBoxMaps.getSelectedValue()).orElse(""), dialog.getSelectedFile().getAbsolutePath()); if (_mapsCollection.saveMap(Optional.ofNullable(listBoxMaps.getSelectedValue()).orElse(""), dialog.getSelectedFile().getAbsolutePath())) {
logger.info("Сохранение карты в файл \"" + dialog.getSelectedFile().getAbsolutePath() + "\""); JOptionPane.showMessageDialog(this, "Сохранение прошло успешно", "Успех", JOptionPane.INFORMATION_MESSAGE);
JOptionPane.showMessageDialog(this, "Сохранение прошло успешно", "Успех", JOptionPane.INFORMATION_MESSAGE); } else {
} catch (Exception ex) { JOptionPane.showMessageDialog(this, "Не сохранилось", "Провал", JOptionPane.INFORMATION_MESSAGE);
logger.error("Ошибка сохранения карты в файл: " + ex.getMessage()); }
JOptionPane.showMessageDialog(this, "Не сохранилось: " + ex.getMessage(), "Провал", JOptionPane.INFORMATION_MESSAGE); } catch (IOException ex) {
ex.printStackTrace();
} }
}); });
fileMenu.add(saveMapMenuItem); fileMenu.add(saveMapMenuItem);
@ -129,13 +122,14 @@ public class FormMapWithSetArtilleries extends JFrame {
dialog.showOpenDialog(this); dialog.showOpenDialog(this);
try { try {
_mapsCollection.loadMap(dialog.getSelectedFile().getAbsolutePath()); if (_mapsCollection.loadMap(dialog.getSelectedFile().getAbsolutePath())) {
reloadMaps(); reloadMaps();
logger.info("Загрузка карты из файла \"" + dialog.getSelectedFile().getAbsolutePath() + "\""); JOptionPane.showMessageDialog(this, "Загрузка прошла успешно", "Успех", JOptionPane.INFORMATION_MESSAGE);
JOptionPane.showMessageDialog(this, "Загрузка прошла успешно", "Успех", JOptionPane.INFORMATION_MESSAGE); } else {
} catch (Exception ex) { JOptionPane.showMessageDialog(this, "Не загрузилось", "Провал", JOptionPane.INFORMATION_MESSAGE);
logger.error("Ошибка загрузки карты из файла: " + ex.getMessage()); }
JOptionPane.showMessageDialog(this, "Не загрузилось: " + ex.getMessage(), "Провал", JOptionPane.INFORMATION_MESSAGE); } catch (IOException ex) {
ex.printStackTrace();
} }
}); });
fileMenu.add(loadMapMenuItem); fileMenu.add(loadMapMenuItem);
@ -149,18 +143,15 @@ public class FormMapWithSetArtilleries extends JFrame {
buttonAddMap.addActionListener(e -> { buttonAddMap.addActionListener(e -> {
if (comboBoxMapSelector.getSelectedIndex() == -1 || textFieldMapName.getText() == null || textFieldMapName.getText().isEmpty()) { if (comboBoxMapSelector.getSelectedIndex() == -1 || textFieldMapName.getText() == null || textFieldMapName.getText().isEmpty()) {
logger.warn("Не удалось добавить карту: Не все данные заполнены");
JOptionPane.showMessageDialog(this, "Не все данные заполнены", "Ошибка", JOptionPane.ERROR_MESSAGE); JOptionPane.showMessageDialog(this, "Не все данные заполнены", "Ошибка", JOptionPane.ERROR_MESSAGE);
return; return;
} }
if (!_mapsDict.containsKey((String)comboBoxMapSelector.getSelectedItem())) { if (!_mapsDict.containsKey((String)comboBoxMapSelector.getSelectedItem())) {
logger.warn("Не удалось добавить карту: Нет такой карты");
JOptionPane.showMessageDialog(this, "Нет такой карты", "Ошибка", JOptionPane.ERROR_MESSAGE); JOptionPane.showMessageDialog(this, "Нет такой карты", "Ошибка", JOptionPane.ERROR_MESSAGE);
return; return;
} }
_mapsCollection.addMap(textFieldMapName.getText(), _mapsDict.get((String)comboBoxMapSelector.getSelectedItem())); _mapsCollection.addMap(textFieldMapName.getText(), _mapsDict.get((String)comboBoxMapSelector.getSelectedItem()));
reloadMaps(); reloadMaps();
logger.info("Добавлена карта \"" + textFieldMapName.getText() + "\" типа " + comboBoxMapSelector.getSelectedItem());
}); });
buttonDeleteMap.addActionListener(e -> { buttonDeleteMap.addActionListener(e -> {
@ -170,7 +161,6 @@ public class FormMapWithSetArtilleries extends JFrame {
if (JOptionPane.showConfirmDialog(this, "Удалить карту " + listBoxMaps.getSelectedValue() + "?", "Удаление", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) { if (JOptionPane.showConfirmDialog(this, "Удалить карту " + listBoxMaps.getSelectedValue() + "?", "Удаление", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
_mapsCollection.deleteMap(Optional.ofNullable(listBoxMaps.getSelectedValue()).orElse("")); _mapsCollection.deleteMap(Optional.ofNullable(listBoxMaps.getSelectedValue()).orElse(""));
logger.info("Удалена карта \"" + listBoxMaps.getSelectedValue() + "\"");
reloadMaps(); reloadMaps();
} }
}); });
@ -179,7 +169,6 @@ public class FormMapWithSetArtilleries extends JFrame {
if (listBoxMaps.getSelectedValue() != null) { if (listBoxMaps.getSelectedValue() != null) {
bufferedImage = _mapsCollection.getMap(Optional.ofNullable(listBoxMaps.getSelectedValue()).orElse("")).showSet(); bufferedImage = _mapsCollection.getMap(Optional.ofNullable(listBoxMaps.getSelectedValue()).orElse("")).showSet();
repaint(); repaint();
logger.info("Переход на карту \"" + listBoxMaps.getSelectedValue() + "\"");
} }
}); });
@ -191,23 +180,16 @@ public class FormMapWithSetArtilleries extends JFrame {
} }
if (artillery != null) { if (artillery != null) {
try { DrawingObjectArtillery objectArtillery = new DrawingObjectArtillery(artillery);
DrawingObjectArtillery objectArtillery = new DrawingObjectArtillery(artillery); if (_mapsCollection.getMap(Optional.ofNullable(listBoxMaps.getSelectedValue()).orElse("")).addArtillery(objectArtillery) != -1)
if (_mapsCollection.getMap(Optional.ofNullable(listBoxMaps.getSelectedValue()).orElse("")).addArtillery(objectArtillery) != -1) { {
JOptionPane.showMessageDialog(this, "Объект добавлен", "Успех", JOptionPane.INFORMATION_MESSAGE); JOptionPane.showMessageDialog(this, "Объект добавлен", "Успех", JOptionPane.INFORMATION_MESSAGE);
bufferedImage = _mapsCollection.getMap(Optional.ofNullable(listBoxMaps.getSelectedValue()).orElse("")).showSet(); bufferedImage = _mapsCollection.getMap(Optional.ofNullable(listBoxMaps.getSelectedValue()).orElse("")).showSet();
repaint(); repaint();
logger.info("Добавлен новый объект"); }
} else { else
logger.warn("Не удалось добавить объект"); {
JOptionPane.showMessageDialog(this, "Не удалось добавить объект", "Провал", JOptionPane.INFORMATION_MESSAGE); JOptionPane.showMessageDialog(this, "Не удалось добавить объект", "Провал", JOptionPane.INFORMATION_MESSAGE);
}
} catch (StorageOverflowException ex) {
logger.warn("Ошибка переполнения хранилища: " + ex.getMessage());
JOptionPane.showMessageDialog(this, "Ошибка переполнения хранилища: " + ex.getMessage(), "Провал", JOptionPane.INFORMATION_MESSAGE);
} catch (Exception ex) {
logger.fatal("Неизвестная ошибка: " + ex.getMessage());
JOptionPane.showMessageDialog(this, "Неизвестная ошибка: " + ex.getMessage(), "Провал", JOptionPane.INFORMATION_MESSAGE);
} }
} }
}); });
@ -226,24 +208,14 @@ public class FormMapWithSetArtilleries extends JFrame {
int position = Integer.parseInt(text); int position = Integer.parseInt(text);
try { IDrawingObject deleted = _mapsCollection.getMap(Optional.ofNullable(listBoxMaps.getSelectedValue()).orElse("")).removeArtilleryAt(position);
IDrawingObject deleted = _mapsCollection.getMap(Optional.ofNullable(listBoxMaps.getSelectedValue()).orElse("")).removeArtilleryAt(position); if (deleted != null) {
if (deleted != null) { deletedObjects.push(deleted);
deletedObjects.push(deleted); JOptionPane.showMessageDialog(this, "Объект удалён", "Успех", JOptionPane.INFORMATION_MESSAGE);
JOptionPane.showMessageDialog(this, "Объект удалён", "Успех", JOptionPane.INFORMATION_MESSAGE); bufferedImage = _mapsCollection.getMap(Optional.ofNullable(listBoxMaps.getSelectedValue()).orElse("")).showSet();
bufferedImage = _mapsCollection.getMap(Optional.ofNullable(listBoxMaps.getSelectedValue()).orElse("")).showSet(); repaint();
repaint(); } else {
logger.info("Удалён объект"); JOptionPane.showMessageDialog(this, "Не удалось удалить объект", "Провал", JOptionPane.INFORMATION_MESSAGE);
} else {
logger.warn("Не удалось удалить объект по позиции " + position + ". Объект равен null");
JOptionPane.showMessageDialog(this, "Не удалось удалить объект", "Провал", JOptionPane.INFORMATION_MESSAGE);
}
} catch (ArtilleryNotFoundException ex) {
logger.warn("Ошибка удаления: " + ex.getMessage());
JOptionPane.showMessageDialog(this, "Не удалось найти артиллерию по позиции: " + ex.getMessage(), "Провал", JOptionPane.INFORMATION_MESSAGE);
} catch (Exception ex) {
logger.error("Неизвестная ошибка: " + ex.getMessage());
JOptionPane.showMessageDialog(this, "Неизвестная ошибка: " + ex.getMessage(), "Провал", JOptionPane.INFORMATION_MESSAGE);
} }
}); });

View File

@ -1,5 +1,4 @@
import java.io.*; import java.io.*;
import java.nio.file.NoSuchFileException;
import java.util.HashMap; import java.util.HashMap;
import java.util.Set; import java.util.Set;
@ -45,7 +44,7 @@ public class MapsCollection {
} }
@SuppressWarnings("ResultOfMethodCallIgnored") @SuppressWarnings("ResultOfMethodCallIgnored")
public void saveData(String filename) throws IOException { public boolean saveData(String filename) throws IOException {
File file = new File(filename); File file = new File(filename);
if (file.exists()) { if (file.exists()) {
@ -61,20 +60,22 @@ public class MapsCollection {
writer.println(String.format("%s%c%s", storage.getKey(), separatorDict, storage.getValue().getData(separatorDict, separatorData))); writer.println(String.format("%s%c%s", storage.getKey(), separatorDict, storage.getValue().getData(separatorDict, separatorData)));
} }
} }
return true;
} }
public void loadData(String filename) throws IOException { public boolean loadData(String filename) throws IOException {
File file = new File(filename); File file = new File(filename);
if (!file.exists()) { if (!file.exists()) {
throw new FileNotFoundException("Файл не найден"); return false;
} }
try (BufferedReader reader = new BufferedReader(new FileReader(file))) { try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
String currentLine = reader.readLine(); String currentLine = reader.readLine();
if (currentLine == null || !currentLine.contains("MapsCollection")) { if (currentLine == null || !currentLine.contains("MapsCollection")) {
throw new FileFormatException("Неверный формат файла"); return false;
} }
_mapsStorage.clear(); _mapsStorage.clear();
@ -91,10 +92,12 @@ public class MapsCollection {
_mapsStorage.get(elements[0]).loadData(elements[2].split(separatorData + "\n?")); _mapsStorage.get(elements[0]).loadData(elements[2].split(separatorData + "\n?"));
} }
} }
return true;
} }
@SuppressWarnings("ResultOfMethodCallIgnored") @SuppressWarnings("ResultOfMethodCallIgnored")
public void saveMap(String mapName, String filename) throws Exception { public boolean saveMap(String mapName, String filename) throws IOException {
File file = new File(filename); File file = new File(filename);
if (file.exists()) { if (file.exists()) {
@ -106,7 +109,7 @@ public class MapsCollection {
MapWithSetArtilleriesGeneric<IDrawingObject, AbstractMap> map = _mapsStorage.getOrDefault(mapName, null); MapWithSetArtilleriesGeneric<IDrawingObject, AbstractMap> map = _mapsStorage.getOrDefault(mapName, null);
if (map == null) { if (map == null) {
throw new IndexOutOfBoundsException(); return false;
} }
try (PrintWriter writer = new PrintWriter(file)) { try (PrintWriter writer = new PrintWriter(file)) {
@ -118,20 +121,22 @@ public class MapsCollection {
writer.println(artillery.getInfo()); writer.println(artillery.getInfo());
} }
} }
return true;
} }
public void loadMap(String filename) throws IOException { public boolean loadMap(String filename) throws IOException {
File file = new File(filename); File file = new File(filename);
if (!file.exists()) { if (!file.exists()) {
throw new FileNotFoundException("Файл не найден"); return false;
} }
try (BufferedReader reader = new BufferedReader(new FileReader(file))) { try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
String currentLine = reader.readLine(); String currentLine = reader.readLine();
if (currentLine == null || !currentLine.contains("Map")) { if (currentLine == null || !currentLine.contains("Map")) {
throw new FileFormatException("Неверный формат файла"); return false;
} }
String mapName = reader.readLine(); String mapName = reader.readLine();
@ -140,7 +145,7 @@ public class MapsCollection {
if (_mapsStorage.containsKey(mapName)) { if (_mapsStorage.containsKey(mapName)) {
map = _mapsStorage.get(mapName); map = _mapsStorage.get(mapName);
if (!map.getMap().getClass().getSimpleName().equals(reader.readLine())) { if (!map.getMap().getClass().getSimpleName().equals(reader.readLine())) {
throw new FileFormatException("Неверный формат файла"); return false;
} }
map._setArtilleries.clear(); map._setArtilleries.clear();
} else { } else {
@ -157,5 +162,7 @@ public class MapsCollection {
_mapsStorage.put(mapName, map); _mapsStorage.put(mapName, map);
} }
return true;
} }
} }

View File

@ -1,9 +1,8 @@
import javax.swing.*; import javax.swing.*;
import org.apache.logging.log4j.*;
public class Program { public class Program {
public static void main(String[] args) { public static void main(String[] args) {
FormMapWithSetArtilleries form = new FormMapWithSetArtilleries(LogManager.getLogger(Program.class)); FormMapWithSetArtilleries form = new FormMapWithSetArtilleries();
form.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); form.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
} }
} }

View File

@ -1,25 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="info" >
<Appenders>
<File name="error" fileName="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="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>