Eliseev E.E. LabWork07 #7

Closed
ElEgEv wants to merge 7 commits from LabWork07 into LabWork06
11 changed files with 199 additions and 70 deletions

View File

@ -7,5 +7,14 @@
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar://$MODULE_DIR$/../../../../../log4j-1.2.17/apache-log4j-1.2.17/log4j-1.2.17.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
</component>
</module>

2
Project/SaveData.txt Normal file
View File

@ -0,0 +1,2 @@
MapsCollection
123|SimpleMap|1000:750:-256;

0
Project/loginfo.log Normal file
View File

0
Project/logwarn.log Normal file
View File

View File

@ -1,3 +1,5 @@
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import javax.imageio.ImageIO;
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
@ -40,6 +42,12 @@ public class FormMapWithSetPlanesGeneric extends JFrame{
//объект от коллекции карт
private final MapsCollection _mapsCollection;
//логгер
private static Logger _logger;
//дополнительные логгеры
Logger logger = Logger.getLogger("FormMapWithSetPlanesGeneric");
//Для выпадающего списка
HashMap<String, AbstractMap> _mapsHashMap = new HashMap<>()
{{
@ -51,6 +59,7 @@ public class FormMapWithSetPlanesGeneric extends JFrame{
public FormMapWithSetPlanesGeneric()
{
super("Хранилище");
Logger.getLogger(FormMapWithSetPlanesGeneric.class.getName());
CreateWindow();
_mapsCollection = new MapsCollection(730, 700);
ComboBoxSelectorMap.removeAllItems();
@ -123,17 +132,28 @@ public class FormMapWithSetPlanesGeneric extends JFrame{
{
JOptionPane.showMessageDialog(null, "Не все данные заполнены", "Ошибка", JOptionPane.ERROR_MESSAGE);
if(ComboBoxSelectorMap.getSelectedIndex() == -1)
{
logger.log(Level.ERROR, "При добавлении карты " + ComboBoxSelectorMap.getSelectedIndex() + "не была выбрана карта");
}
else
{
logger.log(Level.ERROR, "При добавлении карты " + ComboBoxSelectorMap.getSelectedIndex() + "не была названа карта");
}
return;
}
if(!_mapsHashMap.containsKey(ComboBoxSelectorMap.getSelectedItem()))
{
JOptionPane.showMessageDialog(null, "Данная карта отсутсвует", "Ошибка", JOptionPane.ERROR_MESSAGE);
logger.log(Level.ERROR, "Отсутствует карта с названием " + TextBoxNewMapName.getText());
return;
}
_mapsCollection.AddMap(TextBoxNewMapName.getText(), _mapsHashMap.get(ComboBoxSelectorMap.getSelectedItem().toString()));
logger.log(Level.INFO, "Добавлена карта " + TextBoxNewMapName.getText());
ReloadMaps();
}
});
@ -151,6 +171,7 @@ public class FormMapWithSetPlanesGeneric extends JFrame{
"Удаление", JOptionPane.YES_NO_OPTION) == 0)
{
_mapsCollection.DelMap(ListBoxMaps.getSelectedValue().toString());
logger.log(Level.INFO, "Удалена карта " + ListBoxMaps.getSelectedValue().toString());
ReloadMaps();
}
}
@ -166,6 +187,7 @@ public class FormMapWithSetPlanesGeneric extends JFrame{
}
UpdateWindow(_mapsCollection.get(ListBoxMaps.getSelectedValue().toString()).ShowSet());
logger.log(Level.INFO, "Осуществлён переход на карту под названием " + ListBoxMaps.getSelectedValue().toString());
}
});
@ -199,27 +221,46 @@ public class FormMapWithSetPlanesGeneric extends JFrame{
public void actionPerformed(ActionEvent e) {
FormPlaneConfig form = new FormPlaneConfig();
form.AddEvent(newPlane ->{
if(ListBoxMaps.getSelectedIndex() == -1)
form.AddEvent(newPlane -> {
try
{
return;
if (ListBoxMaps.getSelectedIndex() == -1) {
return;
}
if (newPlane != null) {
DrawningObjectPlane plane = new DrawningObjectPlane(newPlane);
if (_mapsCollection.get(ListBoxMaps.getSelectedValue().toString()).Add(plane) != -1) {
JOptionPane.showMessageDialog(null, "Объект добавлен");
logger.log(Level.INFO, "Добавлен объект: " + plane);
UpdateWindow(_mapsCollection.get(ListBoxMaps.getSelectedValue().toString()).ShowSet());
} else {
JOptionPane.showMessageDialog(null, "Не удалось добавить объект", "Ошибка", JOptionPane.ERROR_MESSAGE);
logger.log(Level.INFO, "Не удалось добавить объект: " + plane);
}
}
}
if(newPlane != null)
catch(StorageOverflowException ex)
{
DrawningObjectPlane plane = new DrawningObjectPlane(newPlane);
if(_mapsCollection.get(ListBoxMaps.getSelectedValue().toString()).Add(plane) != -1)
{
JOptionPane.showMessageDialog(null, "Объект добавлен");
UpdateWindow(_mapsCollection.get(ListBoxMaps.getSelectedValue().toString()).ShowSet());
}
else
{
JOptionPane.showMessageDialog(null, "Не удалось добавить объект");
}
JOptionPane.showConfirmDialog(null, "Ошибка, хранилище переполнено: " + ex.getMessage(), "Результат",
JOptionPane.ERROR_MESSAGE);
logger.log(Level.WARN, "Ошибка, переполнение хранилища: " + ex.getMessage());
}
catch(IllegalArgumentException ex)
{
JOptionPane.showConfirmDialog(null, ex.getMessage(), "Результат",
JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);
logger.log(Level.ERROR, "Ошибка добавления: " + ex.getMessage());
}
catch(Exception ex)
{
JOptionPane.showConfirmDialog(null, "Неизвестная ошибка: " + ex.getMessage(), "Результат",
JOptionPane.ERROR_MESSAGE);
logger.log(Level.FATAL, "Неизвестная ошибка: " + ex.getMessage());
}
});
form.setSize(975, 360);
form.setVisible(true);
}
@ -244,14 +285,27 @@ public class FormMapWithSetPlanesGeneric extends JFrame{
int pos = Integer.parseInt(MaskedTextBoxPosition.getText());
if(_mapsCollection.get(ListBoxMaps.getSelectedValue().toString()).Delete(pos) != null)
{
JOptionPane.showMessageDialog(null,"Объект удалён");
UpdateWindow(_mapsCollection.get(ListBoxMaps.getSelectedValue().toString()).ShowSet());
try {
var deletePlane = _mapsCollection.get(ListBoxMaps.getSelectedValue().toString()).Delete(pos);
if (deletePlane != null) {
JOptionPane.showMessageDialog(null, "Объект удалён " + deletePlane);
logger.log(Level.INFO, "Oбъект удалён: " + deletePlane);
UpdateWindow(_mapsCollection.get(ListBoxMaps.getSelectedValue().toString()).ShowSet());
} else {
JOptionPane.showMessageDialog(null, "Не удалось удалить объект", "Ошибка", JOptionPane.ERROR_MESSAGE);
logger.log(Level.ERROR, "Не удалось удалить объект " + deletePlane);
}
}
else
catch (PlaneNotFoundException ex)
{
JOptionPane.showMessageDialog(null,"Не удалось удалить объект");
JOptionPane.showMessageDialog(null, "Ошибка удаления: " + ex.getMessage(), "Ошибка", JOptionPane.ERROR_MESSAGE);
logger.log(Level.WARN, "Ошибка удаления: " + ex.getMessage());
}
catch (Exception ex)
{
JOptionPane.showMessageDialog(null, "Неизвестная ошибка: " + ex.getMessage(), "Ошибка", JOptionPane.ERROR_MESSAGE);
logger.log(Level.FATAL, "Ошибка удаления: " + ex.getMessage());
}
}
});
@ -278,7 +332,13 @@ public class FormMapWithSetPlanesGeneric extends JFrame{
return;
}
UpdateWindow(_mapsCollection.get(ListBoxMaps.getSelectedValue().toString()).ShowOnMap());
try {
UpdateWindow(_mapsCollection.get(ListBoxMaps.getSelectedValue().toString()).ShowOnMap());
} catch (StorageOverflowException ex) {
ex.printStackTrace();
} catch (PlaneNotFoundException ex) {
ex.printStackTrace();
}
}
});
@ -387,16 +447,19 @@ public class FormMapWithSetPlanesGeneric extends JFrame{
if (result == JFileChooser.APPROVE_OPTION)
{
if (_mapsCollection.LoadData(jfc.getSelectedFile().getPath()))
try
{
_mapsCollection.LoadData(jfc.getSelectedFile().getPath());
ReloadMaps();
JOptionPane.showMessageDialog(null,"Загрузка данных прошла успешно",
"Результат", JOptionPane.INFORMATION_MESSAGE);
logger.log(Level.INFO, "Загрузка карт прошла успешно");
}
else
catch(Exception ex)
{
JOptionPane.showMessageDialog(null, "Ошибка загрузки данных",
JOptionPane.showMessageDialog(null, "Ошибка загрузки данных" + ex.getMessage(),
"Результат", JOptionPane.ERROR_MESSAGE);
logger.log(Level.ERROR, "Ошибка загрузки: " + ex.getMessage());
}
}
}
@ -411,15 +474,18 @@ public class FormMapWithSetPlanesGeneric extends JFrame{
if (result == JFileChooser.APPROVE_OPTION)
{
if (_mapsCollection.SaveData(jfc.getSelectedFile().getPath()))
try
{
_mapsCollection.SaveData(jfc.getSelectedFile().getPath());
JOptionPane.showMessageDialog(null,"Сохранение прошло успешно",
"Результат", JOptionPane.INFORMATION_MESSAGE);
logger.log(Level.ERROR,"Сохранение прошло успешно");
}
else
catch(Exception ex)
{
JOptionPane.showMessageDialog(null, "Не сохранилось",
JOptionPane.showMessageDialog(null, "Не сохранилось" + ex.getMessage(),
"Результат", JOptionPane.ERROR_MESSAGE);
logger.log(Level.ERROR,"Ошибка сохранения: " + ex.getMessage());
}
}
}
@ -434,16 +500,19 @@ public class FormMapWithSetPlanesGeneric extends JFrame{
if (result == JFileChooser.APPROVE_OPTION)
{
if (_mapsCollection.LoadOneData(jfc.getSelectedFile().getPath()))
{
ReloadMaps();
JOptionPane.showMessageDialog(null,"Загрузка данных прошла успешно",
"Результат", JOptionPane.INFORMATION_MESSAGE);
try {
if (_mapsCollection.LoadOneData(jfc.getSelectedFile().getPath())) {
ReloadMaps();
JOptionPane.showMessageDialog(null, "Загрузка данных прошла успешно",
"Результат", JOptionPane.INFORMATION_MESSAGE);
} else {
JOptionPane.showMessageDialog(null, "Ошибка загрузки данных",
"Результат", JOptionPane.ERROR_MESSAGE);
}
}
else
catch(Exception ex)
{
JOptionPane.showMessageDialog(null, "Ошибка загрузки данных",
"Результат", JOptionPane.ERROR_MESSAGE);
throw new RuntimeException(ex);
}
}
}
@ -458,15 +527,16 @@ public class FormMapWithSetPlanesGeneric extends JFrame{
if (result == JFileChooser.APPROVE_OPTION)
{
if (_mapsCollection.SaveOneData(jfc.getSelectedFile().getPath(), ListBoxMaps.getSelectedValue().toString()))
{
JOptionPane.showMessageDialog(null,"Сохранение прошло успешно",
try {
_mapsCollection.SaveOneData(jfc.getSelectedFile().getPath(), ListBoxMaps.getSelectedValue().toString());
JOptionPane.showMessageDialog(null, "Сохранение прошло успешно",
"Результат", JOptionPane.INFORMATION_MESSAGE);
}
else
catch(Exception ex)
{
JOptionPane.showMessageDialog(null, "Не сохранилось",
JOptionPane.showMessageDialog(null, "Не сохранилось " + ex.getMessage(),
"Результат", JOptionPane.ERROR_MESSAGE);
throw new RuntimeException(ex);
}
}
}

View File

@ -30,20 +30,19 @@ public class MapWithSetPlanesGeneric <T extends IDrawningObject, U extends Abstr
{
int width = picWidth / _placeSizeWidth;
int height = picHeight / _placeSizeHeight;
_setPlanes = new SetPlanesGeneric<T>(width * height);
_setPlanes = new SetPlanesGeneric<T>(10);
_deletePlane = new LinkedList<>();
_pictureWidth = picWidth;
_pictureHeight = picHeight;
_map = map;
}
public int Add(T plane)
public int Add(T plane) throws StorageOverflowException
{
return _setPlanes.Insert(plane);
}
public T Delete(int position)
{
public T Delete(int position) throws PlaneNotFoundException {
T temp = _setPlanes.Remove(position);
_deletePlane.add(temp);
@ -62,8 +61,7 @@ public class MapWithSetPlanesGeneric <T extends IDrawningObject, U extends Abstr
}
//просмотр объекта на карте
public BufferedImage ShowOnMap()
{
public BufferedImage ShowOnMap() throws StorageOverflowException, PlaneNotFoundException {
Shaking();
for(int i = 0; i < _setPlanes.Count(); i++)
@ -104,8 +102,7 @@ public class MapWithSetPlanesGeneric <T extends IDrawningObject, U extends Abstr
}
//Загрузка списка из массива строк
public void LoadData(String[] records)
{
public void LoadData(String[] records) throws StorageOverflowException {
for (var rec : records)
{
_setPlanes.Insert((T)DrawningObjectPlane.Create(rec));
@ -113,8 +110,7 @@ public class MapWithSetPlanesGeneric <T extends IDrawningObject, U extends Abstr
}
//"взламываем" набор, чтобы все элементы оказались в начале
private void Shaking()
{
private void Shaking() throws StorageOverflowException, PlaneNotFoundException {
int j = _setPlanes.Count() - 1;
for (int i = 0; i < _setPlanes.Count(); i++)

View File

@ -78,13 +78,13 @@ public class MapsCollection
}
//загрузка нформации по по самолётам в ангарах из файла
public Boolean LoadData(String filename)
public void LoadData(String filename) throws FileNotFoundException
{
File file = new File(filename);
if (!file.exists())
{
return false;
throw new FileNotFoundException("Файл не найден");
}
try (BufferedReader reader = new BufferedReader(new FileReader(filename)))
@ -94,7 +94,7 @@ public class MapsCollection
//если не содержит такую запись или пустой файл
if ((str = reader.readLine()) == null || !str.contains("MapsCollection"))
{
return false;
throw new IllegalArgumentException("Формат данных в файле неправильный");
}
_mapStorage.clear();
@ -123,16 +123,15 @@ public class MapsCollection
_mapStorage.get(element[0]).LoadData(element[2].split(String.valueOf(separatorData)));
}
}
catch (IOException e)
catch (IOException | StorageOverflowException ex)
{
JOptionPane.showMessageDialog(null, e.getMessage());
JOptionPane.showMessageDialog(null, ex.getMessage());
throw new RuntimeException(ex);
}
return true;
}
//сохранение информации по самолётам в ангарах в файл
public Boolean SaveOneData(String filename, String mapName)
public void SaveOneData(String filename, String mapName)
{
File file = new File(filename);
@ -158,8 +157,6 @@ public class MapsCollection
catch (IOException e) {
JOptionPane.showMessageDialog(null, e.getMessage());
}
return true;
}
//загрузка информации по по самолётам в ангарах из файла

View File

@ -0,0 +1,10 @@
public class PlaneNotFoundException extends Exception
{
public PlaneNotFoundException(int i) {super ("Не найден объект по позиции " + i); }
public PlaneNotFoundException() { super(); }
public PlaneNotFoundException(String message) { super(message); }
public PlaneNotFoundException(String message, Exception exception) { super(message, exception); }
}

View File

@ -23,14 +23,18 @@ public class SetPlanesGeneric<T extends Object> implements Iterable<T>
}
//добавление объекта в набор
public int Insert(T plane)
{
public int Insert(T plane) throws StorageOverflowException {
return Insert(plane, 0);
}
//добавление объекта в набор на конкретную позицию
public int Insert(T plane, int position)
{
public int Insert(T plane, int position) throws StorageOverflowException {
//проверка на переполнение хранилища
if(_maxCount == Count())
{
throw new StorageOverflowException(_maxCount);
}
//проверка на корректность значения индекса
if (position >= _maxCount|| position < 0)
{
@ -43,12 +47,17 @@ public class SetPlanesGeneric<T extends Object> implements Iterable<T>
}
//удаление объекта из набора с конкретной позиции
public T Remove(int position)
public T Remove(int position) throws PlaneNotFoundException
{
// проверка позиции
if (position >= _maxCount || position < 0)
if (position >= _places.size() || position < 0)
{
return null;
throw new PlaneNotFoundException(position);
}
if (_places.get(position) == null)
{
throw new PlaneNotFoundException(position);
}
// удаление объекта из массива, присовив элементу массива значение null
@ -69,7 +78,7 @@ public class SetPlanesGeneric<T extends Object> implements Iterable<T>
return _places.get(position);
}
public void Set(int position, T value)
public void Set(int position, T value) throws StorageOverflowException
{
if(position >= _maxCount || position < 0)
{

View File

@ -0,0 +1,10 @@
public class StorageOverflowException extends Exception
{
public StorageOverflowException(int count) {super("В наборе превышено допустимое количество: " + count);}
public StorageOverflowException() { super(); }
public StorageOverflowException(String message) { super(message); }
public StorageOverflowException(String message, Exception exception) { super(message, exception); }
}

View File

@ -0,0 +1,26 @@
log4j.logger.FormMapWithSetPlanesGeneric=INFO, fileAppender, adminAppender
log4j.additivity.file=false
log4j.additivity.admin=false
log4j.appender.fileAppender=org.apache.log4j.RollingFileAppender
log4j.appender.fileAppender.File=loginfo.log
log4j.appender.fileAppender.MaxFileSize=5MB
log4j.appender.fileAppender.MaxBackupIndex=1
log4j.appender.fileAppender.filter.a=org.apache.log4j.varia.LevelRangeFilter
log4j.appender.fileAppender.filter.a.LevelMin=INFO
log4j.appender.fileAppender.filter.a.LevelMax=INFO
log4j.appender.fileAppender.filter.a.AcceptOnMatch=TRUE
log4j.appender.fileAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.fileAppender.layout.ConversionPattern=%-5p %c{1}:%L - %m %d{dd-MM-yyyy}%n
log4j.appender.adminAppender=org.apache.log4j.RollingFileAppender
log4j.appender.adminAppender.File=logwarn.log
log4j.appender.adminAppender.MaxFileSize=5MB
log4j.appender.adminAppender.MaxBackupIndex=1
log4j.appender.adminAppender.filter.a=org.apache.log4j.varia.LevelRangeFilter
log4j.appender.adminAppender.filter.a.LevelMin=WARN
log4j.appender.adminAppender.filter.a.LevelMax=FATAL
log4j.appender.adminAppender.filter.a.AcceptOnMatch=TRUE
log4j.appender.adminAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.adminAppender.layout.ConversionPattern=%-5p %c{1}:%L - %m %d{dd-MM-yyyy}%n