6 Commits

Author SHA1 Message Date
DozorovaA.A
8ff85461e3 add logging 2022-12-22 15:29:03 +04:00
DozorovaA.A
1e3c316731 fix 2022-12-14 13:03:36 +04:00
DozorovaA.A
760c2721aa fix 2022-12-12 19:57:37 +04:00
DozorovaA.A
4e206defed add rewrite 2022-12-03 15:32:22 +04:00
DozorovaA.A
5063d4d157 add filter 2022-12-03 15:25:35 +04:00
DozorovaA.A
54dacb11cf add save in file and load from file 2022-12-03 15:19:26 +04:00
13 changed files with 543 additions and 59 deletions

Binary file not shown.

View File

@@ -42,4 +42,15 @@ private DrawingArmoredVehicle _machine = null;
{
return _machine;
}
public static IDrawingObject Create(String data){
return new DrawingObject(ExtentionMachine.CreateDrawingMachine(data));
}
@Override
public String GetInfo() {
if (_machine != null){
return ExtentionMachine.GetDataForSave(_machine);
}
return null;
}
}

View File

@@ -0,0 +1,75 @@
import java.awt.Color;
/*
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
*/
/**
*
* @author Alena
*/
public class ExtentionMachine {
private static final char _separatorForObject = ':';
public static DrawingArmoredVehicle CreateDrawingMachine(String info)
{
String[] strs = info.split(String.valueOf(_separatorForObject));
Color color;
if (strs.length == 5)
{
var temp = new DrawingArmoredVehicle(Integer.parseInt(strs[0]),
Float.parseFloat(strs[1]), new Color(Integer.parseInt(strs[2])));
color = new Color(Integer.parseInt(strs[2]));
temp.Count = Integer.parseInt(strs[4]);
switch (strs[3])
{
case "DrawingRollers":
temp.roller = new Roller(color);
break;
case "DrawingLinePatternRoller":
temp.roller = new DrawingFirstRoller(color);
break;
case "DrawingPiePatternRoller":
temp.roller = new DrawingSecondRoller(color);
break;
}
return temp;
}
if (strs.length == 8)
{
color = new Color(Integer.parseInt(strs[2]));
var temp = new DrawingTank(Integer.parseInt(strs[0]),
Float.parseFloat(strs[1]), new Color(Integer.parseInt(strs[2])),
new Color(Integer.parseInt(strs[5])), Boolean.parseBoolean(strs[6]),
Boolean.parseBoolean(strs[7]));
temp.Count = Integer.parseInt(strs[4]);
switch (strs[3])
{
case "DrawingRollers":
temp.roller = new Roller(color);
break;
case "DrawingLinePatternRoller":
temp.roller = new DrawingFirstRoller(color);
break;
case "DrawingPiePatternRoller":
temp.roller = new DrawingSecondRoller(color);
break;
}
return temp;
}
return null;
}
public static String GetDataForSave(DrawingArmoredVehicle drawingMachine)
{
var machine = drawingMachine.ArmoredVehicle;
var str = ""+machine.Speed + _separatorForObject + machine.Weight + _separatorForObject + machine.BodyColor.getRGB() + _separatorForObject + drawingMachine.roller + _separatorForObject + drawingMachine.Count;
if (machine instanceof TankEntity tank)
{
return str + _separatorForObject + tank.DopColor.getRGB() + _separatorForObject + tank.MachineGun + _separatorForObject + tank.Tower;
}
return str;
}
}

View File

@@ -24,6 +24,7 @@ public class FormArmoredVehicleConfig extends javax.swing.JFrame {
/**
* Creates new form FormArmoredVehicleConfig
*/
public void AddEvent(Consumer<DrawingArmoredVehicle> ev) { EventAddMachine = ev; }
public FormArmoredVehicleConfig() {
initComponents();
MouseAdapter drag = new MouseAdapter() {
@@ -71,7 +72,7 @@ public class FormArmoredVehicleConfig extends javax.swing.JFrame {
buttonCancel.addActionListener(e -> dispose());
}
public void AddEvent(Consumer<DrawingArmoredVehicle> ev) { EventAddMachine = ev; }
public DrawingArmoredVehicle getSelectedCar() {
return _machine;
}

View File

@@ -1,10 +1,49 @@
<?xml version="1.0" encoding="UTF-8" ?>
<Form version="1.9" maxVersion="1.9" type="org.netbeans.modules.form.forminfo.JFrameFormInfo">
<NonVisualComponents>
<Menu class="javax.swing.JMenuBar" name="MenuBar">
<SubComponents>
<Menu class="javax.swing.JMenu" name="jMenuSave">
<Properties>
<Property name="text" type="java.lang.String" value="&#x421;&#x43e;&#x445;&#x440;&#x430;&#x43d;&#x438;&#x442;&#x44c; &#x43a;&#x430;&#x440;&#x442;&#x443;"/>
</Properties>
<Events>
<EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="jMenuSaveMouseClicked"/>
</Events>
</Menu>
<Menu class="javax.swing.JMenu" name="jMenuLoad">
<Properties>
<Property name="text" type="java.lang.String" value="&#x417;&#x430;&#x433;&#x440;&#x443;&#x437;&#x438;&#x442;&#x44c; &#x43a;&#x430;&#x440;&#x442;&#x443;"/>
</Properties>
<Events>
<EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="jMenuLoadMouseClicked"/>
</Events>
</Menu>
<Menu class="javax.swing.JMenu" name="jMenuSaveObj">
<Properties>
<Property name="text" type="java.lang.String" value="&#x421;&#x43e;&#x445;&#x440;&#x430;&#x43d;&#x438;&#x442;&#x44c; &#x43e;&#x431;&#x44a;&#x435;&#x43a;&#x442;"/>
</Properties>
<Events>
<EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="jMenuSaveObjMouseClicked"/>
</Events>
</Menu>
<Menu class="javax.swing.JMenu" name="jMenuLoadObj">
<Properties>
<Property name="text" type="java.lang.String" value="&#x417;&#x430;&#x433;&#x440;&#x443;&#x437;&#x438;&#x442;&#x44c; &#x43e;&#x431;&#x44a;&#x435;&#x43a;&#x442;"/>
</Properties>
<Events>
<EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="jMenuLoadObjMouseClicked"/>
</Events>
</Menu>
</SubComponents>
</Menu>
</NonVisualComponents>
<Properties>
<Property name="defaultCloseOperation" type="int" value="3"/>
</Properties>
<SyntheticProperties>
<SyntheticProperty name="menuBar" type="java.lang.String" value="MenuBar"/>
<SyntheticProperty name="formSizePolicy" type="int" value="1"/>
<SyntheticProperty name="generateCenter" type="boolean" value="false"/>
</SyntheticProperties>

View File

@@ -7,16 +7,24 @@ import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Queue;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.filechooser.FileFilter;
import java.io.FileInputStream;
import java.util.logging.Level;
import java.util.logging.LogManager;
import java.util.logging.Logger;
public class FormMapWithSetMachine extends javax.swing.JFrame {
private Image img;
private MapsCollection _mapCollection;
private static Logger _logger;
private final HashMap<String, AbstractMap> _mapsDict = new HashMap<>() {{
put("Простая карта", new SimpleMap());
put("Вертикальная карта", new VerticalMap());
@@ -34,7 +42,12 @@ private Image img;
MapComboBox.addItem(elem);
}
_mapCollection = new MapsCollection(PicturePanel.getWidth(), PicturePanel.getHeight());
try(FileInputStream ins = new FileInputStream(this.getClass().getResource("log.config").toString().substring(6))){
LogManager.getLogManager().readConfiguration(ins);
_logger = Logger.getLogger(FormMapWithSetMachine.class.getName());
}catch (Exception ignore){
ignore.printStackTrace();
}
}
@@ -61,6 +74,11 @@ private Image img;
jScrollPane2 = new javax.swing.JScrollPane();
MapList = new javax.swing.JList<>();
DeletedFormOpen = new javax.swing.JButton();
MenuBar = new javax.swing.JMenuBar();
jMenuSave = new javax.swing.JMenu();
jMenuLoad = new javax.swing.JMenu();
jMenuSaveObj = new javax.swing.JMenu();
jMenuLoadObj = new javax.swing.JMenu();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
@@ -259,6 +277,40 @@ private Image img;
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
jMenuSave.setText("Сохранить карту");
jMenuSave.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
jMenuSaveMouseClicked(evt);
}
});
MenuBar.add(jMenuSave);
jMenuLoad.setText("Загрузить карту");
jMenuLoad.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
jMenuLoadMouseClicked(evt);
}
});
MenuBar.add(jMenuLoad);
jMenuSaveObj.setText("Сохранить объект");
jMenuSaveObj.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
jMenuSaveObjMouseClicked(evt);
}
});
MenuBar.add(jMenuSaveObj);
jMenuLoadObj.setText("Загрузить объект");
jMenuLoadObj.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
jMenuLoadObjMouseClicked(evt);
}
});
MenuBar.add(jMenuLoadObj);
setJMenuBar(MenuBar);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
@@ -306,21 +358,31 @@ private Image img;
form.addWindowListener(new WindowAdapter() {
@Override
public void windowDeactivated(WindowEvent e) {
if (form.getSelectedCar() == null)
return;
DrawingObject machine = new DrawingObject(form.getSelectedCar());
if (_mapCollection.Get(MapList.getSelectedValue().toString()).add(machine) != -1)
{
if (form.DialogResult) {
JOptionPane.showMessageDialog(null, "Объект добавлен");
img = _mapCollection.Get(MapList.getSelectedValue().toString()).ShowSet();
Draw();
try{
if (form.getSelectedCar() == null)
return;
DrawingObject machine = new DrawingObject(form.getSelectedCar());
if (_mapCollection.Get(MapList.getSelectedValue().toString()).add(machine) != -1)
{
if (form.DialogResult) {
JOptionPane.showMessageDialog(null, "Объект добавлен");
_logger.log(Level.INFO, "Добавлен объект: "+machine);
img = _mapCollection.Get(MapList.getSelectedValue().toString()).ShowSet();
Draw();
}
}
else
{
_logger.log(Level.INFO, "Не удалось добавить объект: "+machine);
JOptionPane.showMessageDialog(null, MapList.getSelectedValue().toString()+" Не удалось добавить объект");
}
}
else
{
JOptionPane.showMessageDialog(null, MapList.getSelectedValue().toString()+" Не удалось добавить объект");
}
catch(StorageOverflowException ex)
{
_logger.log(Level.WARNING, "Ошибка переполнения хранилища: "+ex.getMessage());
JOptionPane.showMessageDialog(null, "Ошибка переполнения хранилища:"+ex.getMessage());
}
}
});
@@ -331,22 +393,36 @@ private Image img;
{
return;
}
int res = JOptionPane.showConfirmDialog (null,"Удалить объект?",
try
{
int res = JOptionPane.showConfirmDialog (null,"Удалить объект?",
"Удаление", JOptionPane.YES_NO_OPTION);
if (res == JOptionPane.YES_OPTION) {
int pos = Integer.parseInt(TextBoxPosition.getText());
deleted.offer(_mapCollection.Get(MapList.getSelectedValue().toString()).GetMachineInList(pos).GetMachine());
var elem = _mapCollection.Get(MapList.getSelectedValue().toString()).GetMachineInList(pos).GetMachine();
deleted.offer(elem);
if (_mapCollection.Get(MapList.getSelectedValue().toString()).remove(pos) != null)
{
JOptionPane.showMessageDialog(null, "Объект удален");
_logger.log(Level.INFO, "Удален объект: "+elem);
img = _mapCollection.Get(MapList.getSelectedValue().toString()).ShowSet();
Draw();
}
else
{
_logger.log(Level.INFO, "Не удалось удалить объект по позиции: "+pos);
JOptionPane.showMessageDialog(null, "Не удалось удалить объект");
}
}
}
catch (MachineNotFoundException ex) {
_logger.log(Level.WARNING, "Ошибка удаления: "+ex.getMessage());
JOptionPane.showMessageDialog(null, "Ошибка удаления: "+ex.getMessage());
} catch (Exception ex) {
_logger.log(Level.WARNING, "Неизвестная ошибка удаления: "+ex.getMessage());
JOptionPane.showMessageDialog(null, "Неизвестная ошибка: "+ex.getMessage());
}
}//GEN-LAST:event_DeleteButtonMouseClicked
private void StoreButtonMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_StoreButtonMouseClicked
@@ -369,15 +445,17 @@ private Image img;
private void AddMapButtonMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_AddMapButtonMouseClicked
if (MapComboBox.getSelectedIndex() == -1 || MapNameTextField.getText().isEmpty()) {
_logger.log(Level.INFO,"Не все данные были заполнены при добавлении карты");
JOptionPane.showMessageDialog(null, "Не все данные заполнены", "Ошибка", JOptionPane.ERROR_MESSAGE);
return;
}
if (!_mapsDict.containsKey(MapComboBox.getSelectedItem())) {
_logger.log(Level.INFO,"Нет карты с названием: "+MapComboBox.getSelectedItem());
JOptionPane.showMessageDialog(null, "Нет такой карты", "Ошибка", JOptionPane.ERROR_MESSAGE);
return;
}
_mapCollection.AddMap(MapNameTextField.getText(), _mapsDict.get(MapComboBox.getSelectedItem().toString()));
_logger.log(Level.INFO, "Добавлена карта: "+MapNameTextField.getText());
ReloadMaps();
}//GEN-LAST:event_AddMapButtonMouseClicked
private void ReloadMaps() {
@@ -414,6 +492,7 @@ private void ReloadMaps() {
"Удаление", JOptionPane.YES_NO_OPTION) == 0) {
_mapCollection.DelMap(MapList.getSelectedValue().toString());
ReloadMaps();
_logger.log(Level.INFO, "Удалена карта: "+MapList.getSelectedValue().toString());
}
}//GEN-LAST:event_DeleteMapButtonMouseClicked
@@ -454,6 +533,7 @@ private void ReloadMaps() {
}
img = _mapCollection.Get((String)MapList.getSelectedValue()).ShowSet();
Draw();
_logger.log(Level.INFO, "Переход на карту: "+MapList.getSelectedValue().toString());
}//GEN-LAST:event_MapListValueChanged
private void DeletedFormOpenMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_DeletedFormOpenMouseClicked
@@ -474,6 +554,97 @@ private void ReloadMaps() {
}
}//GEN-LAST:event_DeletedFormOpenMouseClicked
private void jMenuSaveMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jMenuSaveMouseClicked
JFileChooser fs = new JFileChooser();
fs.setAcceptAllFileFilterUsed(false);
FileNameExtensionFilter filter = new FileNameExtensionFilter(".txt file", "txt");
fs.addChoosableFileFilter(filter);
fs.setDialogTitle("Сохранение карты");
int result = fs.showSaveDialog(null);
if (result == JFileChooser.APPROVE_OPTION) {
try{
File selectedFile = fs.getSelectedFile();
_mapCollection.SaveMap(selectedFile.getPath(), MapList.getSelectedValue().toString());
_logger.log(Level.INFO, "Успешное сохранение в файл: "+selectedFile.getPath());
JOptionPane.showMessageDialog(null, "Сохранение карты прошло успешно", "Результат",JOptionPane.INFORMATION_MESSAGE);
}
catch (Exception ex)
{
_logger.log(Level.INFO, "Данные не сохранились: "+ex.getMessage());
JOptionPane.showMessageDialog(null, "Не сохранилась карта: "+ex.getMessage(), "Результат",JOptionPane.ERROR_MESSAGE);
}
}
}//GEN-LAST:event_jMenuSaveMouseClicked
private void jMenuLoadMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jMenuLoadMouseClicked
JFileChooser fs = new JFileChooser();
fs.setAcceptAllFileFilterUsed(false);
FileNameExtensionFilter filter = new FileNameExtensionFilter(".txt file", "txt");
fs.addChoosableFileFilter(filter);
fs.setDialogTitle("Сохранение карты");
int result = fs.showSaveDialog(null);
if (result == JFileChooser.APPROVE_OPTION) {
try
{
File selectedFile = fs.getSelectedFile();
_mapCollection.LoadMap(selectedFile.getPath());
_logger.log(Level.INFO, "Успешная загрузка из файла: "+selectedFile.getPath());
JOptionPane.showMessageDialog(null, "Загрузка карты прошла успешно", "Результат",JOptionPane.INFORMATION_MESSAGE);
ReloadMaps();
}
catch(Exception ex)
{
_logger.log(Level.WARNING, "Не загрузилось: "+ex.getMessage());
JOptionPane.showMessageDialog(null, "Не сохранилась карта: "+ex.getMessage(), "Результат",JOptionPane.ERROR_MESSAGE);
}
}
}//GEN-LAST:event_jMenuLoadMouseClicked
private void jMenuLoadObjMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jMenuLoadObjMouseClicked
JFileChooser fs = new JFileChooser();
fs.setAcceptAllFileFilterUsed(false);
FileNameExtensionFilter filter = new FileNameExtensionFilter(".txt file", "txt");
fs.addChoosableFileFilter(filter);
fs.setDialogTitle("Загрузка");
int result = fs.showSaveDialog(null);
if (result == JFileChooser.APPROVE_OPTION) {
try{
File selectedFile = fs.getSelectedFile();
_mapCollection.LoadData(selectedFile.getPath());
ReloadMaps();
JOptionPane.showMessageDialog(null, "Загрузка прошла успешно", "Результат",JOptionPane.INFORMATION_MESSAGE);
}
catch (Exception ex)
{
JOptionPane.showMessageDialog(null, "Не удалось загрузить: "+ex.getMessage(), "Результат",JOptionPane.ERROR_MESSAGE);
}
}
}//GEN-LAST:event_jMenuLoadObjMouseClicked
private void jMenuSaveObjMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jMenuSaveObjMouseClicked
JFileChooser fs = new JFileChooser();
fs.setAcceptAllFileFilterUsed(false);
FileNameExtensionFilter filter = new FileNameExtensionFilter(".txt file", "txt");
fs.addChoosableFileFilter(filter);
fs.setDialogTitle("Сохранение");
int result = fs.showSaveDialog(null);
if (result == JFileChooser.APPROVE_OPTION) {
try{
File selectedFile = fs.getSelectedFile();
_mapCollection.SaveData(selectedFile.getPath()+".txt");
JOptionPane.showMessageDialog(null, "Сохранение прошло успешно", "Результат",JOptionPane.INFORMATION_MESSAGE);
}
catch(Exception ex)
{
JOptionPane.showMessageDialog(null, "Не сохранилось", "Результат",JOptionPane.ERROR_MESSAGE);
}
}
}//GEN-LAST:event_jMenuSaveObjMouseClicked
public void Move(String name)
{
switch (name)
@@ -538,12 +709,17 @@ private void ReloadMaps() {
private javax.swing.JComboBox<String> MapComboBox;
private javax.swing.JList<String> MapList;
private java.awt.TextField MapNameTextField;
private javax.swing.JMenuBar MenuBar;
private javax.swing.JPanel PicturePanel;
private java.awt.Button RightButton;
private java.awt.Button StoreButton;
private java.awt.TextField TextBoxPosition;
private java.awt.Button UpButton;
private javax.swing.JLabel jLabel1;
private javax.swing.JMenu jMenuLoad;
private javax.swing.JMenu jMenuLoadObj;
private javax.swing.JMenu jMenuSave;
private javax.swing.JMenu jMenuSaveObj;
private javax.swing.JScrollPane jScrollPane2;
// End of variables declaration//GEN-END:variables
}

View File

@@ -30,4 +30,8 @@ public interface IDrawingObject {
/// </summary>
/// <returns></returns>
HashMap<String, Float> GetCurrentPosition();
//Получение информации по объекту
String GetInfo();
public DrawingArmoredVehicle GetMachine();
}

View File

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

View File

@@ -24,13 +24,15 @@ public class MapWithSetMachineGeneric<T extends IDrawingObject, U extends Abstra
_pictureHeight = picHeight;
_map = map;
}
public int add(T car)
public void Clear() {
_setCars.Clear();
}
public int add(T car) throws StorageOverflowException
{
return _setCars.Insert(car);
}
public T remove(int position)
public T remove(int position) throws MachineNotFoundException
{
return _setCars.Remove(position);
}
@@ -77,8 +79,16 @@ public class MapWithSetMachineGeneric<T extends IDrawingObject, U extends Abstra
var car = _setCars.Get(j);
if (car != null)
{
try {
_setCars.Insert(car, i);
} catch (StorageOverflowException e) {
throw new RuntimeException(e);
}
try {
_setCars.Remove(j);
} catch (MachineNotFoundException e) {
throw new RuntimeException(e);
}
break;
}
}
@@ -118,4 +128,33 @@ public class MapWithSetMachineGeneric<T extends IDrawingObject, U extends Abstra
}
}
}
// Получение данных в виде строки
public String GetData(char separatorType, char separatorData)
{
String data = _map.getClass().getName()+separatorType;
data = data.substring(4);
for (var machine : _setCars)
{
data += machine.GetInfo()+separatorData;
}
return data;
}
public String GetDataMap(char separatorType, char separatorData)
{
String data = _map.getClass().getName()+separatorType;
data = data.substring(4) + '\n';
for (var machine : _setCars)
{
data += machine.GetInfo()+separatorData+'\n';
}
return data;
}
// Загрузка списка из массива строк
public void LoadData(String[] records) throws StorageOverflowException
{
for (var rec : records)
{
_setCars.Insert((T)DrawingObject.Create(rec));
}
}
}

View File

@@ -1,15 +1,24 @@
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
public class MapsCollection {
/// <summary>
/// Словарь (хранилище) с картами
/// </summary>
Map <String, MapWithSetMachineGeneric<DrawingObject, AbstractMap>> _mapStorages;
Map <String, MapWithSetMachineGeneric<IDrawingObject, AbstractMap>> _mapStorages;
/// <summary>
/// Возвращение списка названий карт
/// </summary>
@@ -22,6 +31,10 @@ public class MapsCollection {
/// Высота окна отрисовки
/// </summary>
private int _pictureHeight;
/// Разделитель для записи информации по элементу словаря в файл
private final char separatorDict = '|';
/// Разделитель для записей коллекции данных в файл
private final char separatorData = ';';
/// <summary>
/// Конструктор
/// </summary>
@@ -29,7 +42,7 @@ public class MapsCollection {
/// <param name="pictureHeight"></param>
public MapsCollection(int pictureWidth, int pictureHeight)
{
_mapStorages = new HashMap<String, MapWithSetMachineGeneric<DrawingObject, AbstractMap>>();
_mapStorages = new HashMap<String, MapWithSetMachineGeneric<IDrawingObject, AbstractMap>>();
Keys = new ArrayList<String>(_mapStorages.keySet());
_pictureWidth = pictureWidth;
_pictureHeight = pictureHeight;
@@ -59,7 +72,7 @@ public class MapsCollection {
}
else
{
var NewElem = new MapWithSetMachineGeneric<DrawingObject, AbstractMap>(
var NewElem = new MapWithSetMachineGeneric<IDrawingObject, AbstractMap>(
_pictureWidth, _pictureHeight, map);
_mapStorages.put(name, NewElem);
}
@@ -85,7 +98,7 @@ public class MapsCollection {
/// </summary>
/// <param name="ind"></param>
/// <returns></returns>
public MapWithSetMachineGeneric<DrawingObject, AbstractMap> Get(String ind)
public MapWithSetMachineGeneric<IDrawingObject, AbstractMap> Get(String ind)
{
if(_mapStorages.keySet().contains(ind))
{
@@ -94,12 +107,135 @@ public class MapsCollection {
return null;
}
public DrawingObject Get(String name, int ind) {
public IDrawingObject Get(String name, int ind) {
if (_mapStorages.containsKey(name))
{
return _mapStorages.get(name).GetMachineInList(ind);
}
return null;
}
/// Сохранение информации по тракторам в хранилище в файл
public void SaveData(String filename) {
File file = new File(filename);
if (file.exists()) {
file.delete();
}
try (BufferedWriter br = new BufferedWriter(new FileWriter(filename)))
{
br.write("MapsCollection\n");
for (var storage : _mapStorages.entrySet()) {
br.write(storage.getKey() + separatorDict + storage.getValue().GetData(separatorDict, separatorData) + "\n");
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
/// Загрузка информации по машинам в депо из файла
public void LoadData(String filename) throws FileNotFoundException
{
if (!(new File(filename).exists()))
{
throw new FileNotFoundException("Файл не найден");
}
try (BufferedReader br = new BufferedReader(new FileReader(filename)))
{
String str = "";
if ((str = br.readLine()) == null || !str.contains("MapsCollection"))
{
//если нет такой записи, то это не те данные
throw new IllegalArgumentException("Формат данных в файле неправильный");
}
//очищаем записи
_mapStorages.clear();
while ((str = br.readLine()) != null)
{
var elem = str.split(String.format("\\%c",separatorDict));
AbstractMap map = null;
switch (elem[1])
{
case "SimpleMap":
map = new SimpleMap();
break;
case "VerticalMap":
map = new VerticalMap();
break;
case "HorizontalMap":
map = new HorizontalMap();
break;
}
_mapStorages.put(elem[0], new MapWithSetMachineGeneric<IDrawingObject, AbstractMap>(_pictureWidth, _pictureHeight, map));
_mapStorages.get(elem[0]).LoadData(elem[2].split(separatorData + "\n?"));
}
} catch (IOException e) {
throw new RuntimeException(e);
}
catch (StorageOverflowException e) {
throw new RuntimeException(e);
}
}
public boolean SaveMap(String filename, String index) {
File file = new File(filename);
if (file.exists()) {
file.delete();
}
var elem = _mapStorages.get(index);
if (elem==null)
return false;
try (BufferedWriter br = new BufferedWriter(new FileWriter(filename)))
{
br.write("MapsCollection\n");
br.write(index + separatorDict);
br.write(elem.GetDataMap(separatorDict, separatorData));
}
catch (IOException e) {
throw new RuntimeException(e);
}
return true;
}
public boolean LoadMap(String filename) throws StorageOverflowException {
if (!(new File(filename).exists()))
{
return false;
}
try (BufferedReader br = new BufferedReader(new FileReader(filename)))
{
String str = "";
if ((str = br.readLine()) == null || !str.contains("MapsCollection"))
{
//если нет такой записи, то это не те данные
return false;
}
if ((str = br.readLine()) != null)
{
var elem = str.split(String.format("\\%c",separatorDict));
AbstractMap map = null;
switch (elem[1])
{
case "SimpleMap":
map = new SimpleMap();
break;
case "VerticalMap":
map = new VerticalMap();
break;
case "HorizontalMap":
map = new HorizontalMap();
break;
}
if(_mapStorages.containsKey(elem[0])){
_mapStorages.get(elem[0]).Clear();
}
else _mapStorages.put(elem[0], new MapWithSetMachineGeneric<IDrawingObject, AbstractMap>(_pictureWidth, _pictureHeight, map));
while((str = br.readLine()) != null) {
_mapStorages.get(elem[0]).LoadData(str.split(separatorData + "\n?"));
}
}
} catch (IOException e) {
throw new RuntimeException(e);
}
return true;
}
}

View File

@@ -13,52 +13,32 @@ public class SetArmoredCarsGeneric<T> implements Iterable<T>{
public int getCount() {
return _places.isEmpty() ? 0 : _places.size();
}
public int Insert(T armoredCar)
public void Clear() {
_places.clear();
}
public int Insert(T armoredCar) throws StorageOverflowException
{
if(_places.size()+1 <= _MaxCount) return Insert(armoredCar, 0);
else return -1;
}
public int Insert(T armoredCar, int position)
public int Insert(T armoredCar, int position) throws StorageOverflowException
{
if ((position < 0 || position > getCount()))
return -1;
// if(_places.isEmpty())
// {
// _places.add(armoredCar);
// return 0;
// }
// if ((_places.get(position) != null) && !_places.isEmpty())
// {
// int index_empty = -1;
// // поиск первого пустого элемента
// for (int i = position + 1; i < _MaxCount; i++)
// {
// if (_places.get(i) == null)
// {
// index_empty = i;
// }
// }
// if (index_empty == -1)
// return -1;
// else
// {
// for (int i = index_empty; i > position; i--)
// {
// _places.set(i, _places.get(i-1));
// }
// }
// }
_places.add(position, armoredCar);
return position;
}
public T Remove(int position)
public T Remove(int position) throws MachineNotFoundException
{
if (position < 0 || position >= getCount() || _places.get(position) == null)
return null;
if (position < 0 || position >= getCount())
throw new MachineNotFoundException(position);
if (_places.get(position) == null)
throw new MachineNotFoundException(position);
T armoredCar = _places.get(position);
_places.set(position, null);
@@ -74,7 +54,11 @@ public class SetArmoredCarsGeneric<T> implements Iterable<T>{
public void Set(int position, T value){
if (position < 0 || position + 1 >= getCount())
return;
Insert(value, position);
try {
Insert(value, position);
} catch (StorageOverflowException e) {
throw new RuntimeException(e);
}
}
@Override

View File

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

View File

@@ -0,0 +1,9 @@
handlers = java.util.logging.FileHandler
java.util.logging.FileHandler.level = INFO
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
java.util.logging.FileHandler.append = true
java.util.logging.FileHandler.pattern = log.txt
java.util.logging.ConsoleHandler.level = INFO
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter