diff --git a/.gitignore b/.gitignore
index 2c6eb3893..3f380c3c9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,6 @@
/.metadata
/robots/.settings
/robots/bin
-eclipse.bat
\ No newline at end of file
+eclipse.bat
+/.idea
+/out/
\ No newline at end of file
diff --git a/robots/.classpath b/robots/.classpath
deleted file mode 100644
index fceb4801b..000000000
--- a/robots/.classpath
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/robots/.gitignore b/robots/.gitignore
deleted file mode 100644
index 2757ffa76..000000000
--- a/robots/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-/bin/
-/.settings/
diff --git a/robots/.project b/robots/.project
deleted file mode 100644
index 78e165663..000000000
--- a/robots/.project
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
- Robots
-
-
-
-
-
- org.eclipse.jdt.core.javabuilder
-
-
-
-
-
- org.eclipse.jdt.core.javanature
-
-
diff --git a/robots/src/gui/MainApplicationFrame.java b/robots/src/gui/MainApplicationFrame.java
deleted file mode 100644
index 62e943ee1..000000000
--- a/robots/src/gui/MainApplicationFrame.java
+++ /dev/null
@@ -1,156 +0,0 @@
-package gui;
-
-import java.awt.Dimension;
-import java.awt.Toolkit;
-import java.awt.event.KeyEvent;
-
-import javax.swing.JDesktopPane;
-import javax.swing.JFrame;
-import javax.swing.JInternalFrame;
-import javax.swing.JMenu;
-import javax.swing.JMenuBar;
-import javax.swing.JMenuItem;
-import javax.swing.SwingUtilities;
-import javax.swing.UIManager;
-import javax.swing.UnsupportedLookAndFeelException;
-
-import log.Logger;
-
-/**
- * Что требуется сделать:
- * 1. Метод создания меню перегружен функционалом и трудно читается.
- * Следует разделить его на серию более простых методов (или вообще выделить отдельный класс).
- *
- */
-public class MainApplicationFrame extends JFrame
-{
- private final JDesktopPane desktopPane = new JDesktopPane();
-
- public MainApplicationFrame() {
- //Make the big window be indented 50 pixels from each edge
- //of the screen.
- int inset = 50;
- Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
- setBounds(inset, inset,
- screenSize.width - inset*2,
- screenSize.height - inset*2);
-
- setContentPane(desktopPane);
-
-
- LogWindow logWindow = createLogWindow();
- addWindow(logWindow);
-
- GameWindow gameWindow = new GameWindow();
- gameWindow.setSize(400, 400);
- addWindow(gameWindow);
-
- setJMenuBar(generateMenuBar());
- setDefaultCloseOperation(EXIT_ON_CLOSE);
- }
-
- protected LogWindow createLogWindow()
- {
- LogWindow logWindow = new LogWindow(Logger.getDefaultLogSource());
- logWindow.setLocation(10,10);
- logWindow.setSize(300, 800);
- setMinimumSize(logWindow.getSize());
- logWindow.pack();
- Logger.debug("Протокол работает");
- return logWindow;
- }
-
- protected void addWindow(JInternalFrame frame)
- {
- desktopPane.add(frame);
- frame.setVisible(true);
- }
-
-// protected JMenuBar createMenuBar() {
-// JMenuBar menuBar = new JMenuBar();
-//
-// //Set up the lone menu.
-// JMenu menu = new JMenu("Document");
-// menu.setMnemonic(KeyEvent.VK_D);
-// menuBar.add(menu);
-//
-// //Set up the first menu item.
-// JMenuItem menuItem = new JMenuItem("New");
-// menuItem.setMnemonic(KeyEvent.VK_N);
-// menuItem.setAccelerator(KeyStroke.getKeyStroke(
-// KeyEvent.VK_N, ActionEvent.ALT_MASK));
-// menuItem.setActionCommand("new");
-//// menuItem.addActionListener(this);
-// menu.add(menuItem);
-//
-// //Set up the second menu item.
-// menuItem = new JMenuItem("Quit");
-// menuItem.setMnemonic(KeyEvent.VK_Q);
-// menuItem.setAccelerator(KeyStroke.getKeyStroke(
-// KeyEvent.VK_Q, ActionEvent.ALT_MASK));
-// menuItem.setActionCommand("quit");
-//// menuItem.addActionListener(this);
-// menu.add(menuItem);
-//
-// return menuBar;
-// }
-
- private JMenuBar generateMenuBar()
- {
- JMenuBar menuBar = new JMenuBar();
-
- JMenu lookAndFeelMenu = new JMenu("Режим отображения");
- lookAndFeelMenu.setMnemonic(KeyEvent.VK_V);
- lookAndFeelMenu.getAccessibleContext().setAccessibleDescription(
- "Управление режимом отображения приложения");
-
- {
- JMenuItem systemLookAndFeel = new JMenuItem("Системная схема", KeyEvent.VK_S);
- systemLookAndFeel.addActionListener((event) -> {
- setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
- this.invalidate();
- });
- lookAndFeelMenu.add(systemLookAndFeel);
- }
-
- {
- JMenuItem crossplatformLookAndFeel = new JMenuItem("Универсальная схема", KeyEvent.VK_S);
- crossplatformLookAndFeel.addActionListener((event) -> {
- setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
- this.invalidate();
- });
- lookAndFeelMenu.add(crossplatformLookAndFeel);
- }
-
- JMenu testMenu = new JMenu("Тесты");
- testMenu.setMnemonic(KeyEvent.VK_T);
- testMenu.getAccessibleContext().setAccessibleDescription(
- "Тестовые команды");
-
- {
- JMenuItem addLogMessageItem = new JMenuItem("Сообщение в лог", KeyEvent.VK_S);
- addLogMessageItem.addActionListener((event) -> {
- Logger.debug("Новая строка");
- });
- testMenu.add(addLogMessageItem);
- }
-
- menuBar.add(lookAndFeelMenu);
- menuBar.add(testMenu);
- return menuBar;
- }
-
- private void setLookAndFeel(String className)
- {
- try
- {
- UIManager.setLookAndFeel(className);
- SwingUtilities.updateComponentTreeUI(this);
- }
- catch (ClassNotFoundException | InstantiationException
- | IllegalAccessException | UnsupportedLookAndFeelException e)
- {
- // just ignore
- }
- }
-}
diff --git a/robots/src/gui/RobotsProgram.java b/robots/src/gui/RobotsProgram.java
deleted file mode 100644
index ae0930a8b..000000000
--- a/robots/src/gui/RobotsProgram.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package gui;
-
-import java.awt.Frame;
-
-import javax.swing.SwingUtilities;
-import javax.swing.UIManager;
-
-public class RobotsProgram
-{
- public static void main(String[] args) {
- try {
- UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");
-// UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
-// UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
-// UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
- } catch (Exception e) {
- e.printStackTrace();
- }
- SwingUtilities.invokeLater(() -> {
- MainApplicationFrame frame = new MainApplicationFrame();
- frame.pack();
- frame.setVisible(true);
- frame.setExtendedState(Frame.MAXIMIZED_BOTH);
- });
- }}
diff --git a/robots/src/gui/GameVisualizer.java b/robots/src/main/java/gui/GameVisualizer.java
similarity index 100%
rename from robots/src/gui/GameVisualizer.java
rename to robots/src/main/java/gui/GameVisualizer.java
diff --git a/robots/src/gui/GameWindow.java b/robots/src/main/java/gui/GameWindow.java
similarity index 100%
rename from robots/src/gui/GameWindow.java
rename to robots/src/main/java/gui/GameWindow.java
diff --git a/robots/src/gui/LogWindow.java b/robots/src/main/java/gui/LogWindow.java
similarity index 100%
rename from robots/src/gui/LogWindow.java
rename to robots/src/main/java/gui/LogWindow.java
diff --git a/robots/src/main/java/gui/MainApplicationFrame.java b/robots/src/main/java/gui/MainApplicationFrame.java
new file mode 100644
index 000000000..0e819b99d
--- /dev/null
+++ b/robots/src/main/java/gui/MainApplicationFrame.java
@@ -0,0 +1,149 @@
+package gui;
+
+import java.awt.Dimension;
+import java.awt.Toolkit;
+import java.awt.event.KeyEvent;
+
+
+import log.Logger;
+
+import javax.swing.*;
+
+
+public class MainApplicationFrame extends JFrame {
+ private final JDesktopPane desktopPane = new JDesktopPane();
+
+ public MainApplicationFrame() {
+ int inset = 50;
+ Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
+ setBounds(inset, inset,
+ screenSize.width - inset * 2,
+ screenSize.height - inset * 2);
+
+ setContentPane(desktopPane);
+
+
+ LogWindow logWindow = createLogWindow();
+ addWindow(logWindow);
+
+ GameWindow gameWindow = new GameWindow();
+ gameWindow.setSize(400, 400);
+ addWindow(gameWindow);
+
+ setJMenuBar(generateMenuBar());
+ setDefaultCloseOperation(EXIT_ON_CLOSE);
+ }
+
+ protected LogWindow createLogWindow() {
+ LogWindow logWindow = new LogWindow(Logger.getDefaultLogSource());
+ logWindow.setLocation(10, 10);
+ logWindow.setSize(300, 800);
+ setMinimumSize(logWindow.getSize());
+ logWindow.pack();
+ Logger.debug("Протокол работает");
+ return logWindow;
+ }
+
+ protected void addWindow(JInternalFrame frame) {
+ desktopPane.add(frame);
+ frame.setVisible(true);
+ }
+
+ private JMenuBar generateMenuBar() {
+ JMenuBar menuBar = new JMenuBar();
+
+ makeLookAndFeelMenu(menuBar);
+ makeTestMenu(menuBar);
+ makeSystemMenu(menuBar);
+
+ return menuBar;
+ }
+
+ private void makeLookAndFeelMenu(JMenuBar menuBar) {
+ JMenu lookAndFeelMenu = initializeMenu("Режим отображения",
+ "Управление режимом отображения приложения");
+
+ lookAndFeelMenu.add(createSystemLookAndFeelMenuItem("Системная схема"));
+ lookAndFeelMenu.add(createSystemLookAndFeelMenuItem("Универсальная схема"));
+
+ menuBar.add(lookAndFeelMenu);
+ }
+
+ private JMenuItem createSystemLookAndFeelMenuItem(String text) {
+ JMenuItem systemLookAndFeel = new JMenuItem(text, KeyEvent.VK_S);
+ systemLookAndFeel.addActionListener((event) -> {
+ setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+ this.invalidate();
+ });
+
+ return systemLookAndFeel;
+ }
+
+ private void makeTestMenu(JMenuBar menuBar) {
+ JMenu testMenu = initializeMenu("Тесты", "Тестовые команды");
+
+ testMenu.add(createTestMenuItem("Сообщение в лог", "Новая строка"));
+
+ menuBar.add(testMenu);
+ }
+
+ private JMenuItem createTestMenuItem(String text, String logMessage) {
+ JMenuItem addLogMessageItem = new JMenuItem(text, KeyEvent.VK_S);
+ addLogMessageItem.addActionListener((event) -> {
+ Logger.debug(logMessage);
+ });
+
+ return addLogMessageItem;
+ }
+
+ private void makeSystemMenu(JMenuBar menuBar) {
+ JMenu systemMenu = initializeMenu("Система", "Управление системой");
+
+ systemMenu.add(createSystemMenuCloseItem("Закрыть"));
+
+ menuBar.add(systemMenu);
+ }
+
+ private JMenuItem createSystemMenuCloseItem(String text) {
+ JMenuItem closeItem = new JMenuItem(text, KeyEvent.VK_S);
+ closeItem.addActionListener((event) -> {
+ closeWithConfirmation();
+ });
+
+ return closeItem;
+ }
+
+ private void closeWithConfirmation() {
+ int response = JOptionPane.showOptionDialog(null,
+ "Закрыть приложение?",
+ "Подтверждение",
+ JOptionPane.DEFAULT_OPTION,
+ JOptionPane.QUESTION_MESSAGE,
+ null,
+ Select.values(),
+ Select.NO);
+
+ if (response == JOptionPane.YES_OPTION) {
+ System.exit(0);
+ }
+ }
+
+
+ private JMenu initializeMenu(String menuName, String description) {
+ JMenu someMenu = new JMenu(menuName);
+ someMenu.setMnemonic(KeyEvent.VK_V);
+ someMenu.getAccessibleContext().setAccessibleDescription(
+ description);
+
+ return someMenu;
+ }
+
+ private void setLookAndFeel(String className) {
+ try {
+ UIManager.setLookAndFeel(className);
+ SwingUtilities.updateComponentTreeUI(this);
+ } catch (ClassNotFoundException | InstantiationException
+ | IllegalAccessException | UnsupportedLookAndFeelException e) {
+ }
+ }
+}
diff --git a/robots/src/main/java/gui/RobotsProgram.java b/robots/src/main/java/gui/RobotsProgram.java
new file mode 100644
index 000000000..cf75dbc2e
--- /dev/null
+++ b/robots/src/main/java/gui/RobotsProgram.java
@@ -0,0 +1,22 @@
+package gui;
+
+import java.awt.Frame;
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
+
+
+public class RobotsProgram {
+ public static void main(String[] args) {
+ try {
+ UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ SwingUtilities.invokeLater(() -> {
+ MainApplicationFrame frame = new MainApplicationFrame();
+ frame.pack();
+ frame.setVisible(true);
+ frame.setExtendedState(Frame.MAXIMIZED_BOTH);
+ });
+ }
+}
diff --git a/robots/src/main/java/gui/Select.java b/robots/src/main/java/gui/Select.java
new file mode 100644
index 000000000..3cb7fa1d8
--- /dev/null
+++ b/robots/src/main/java/gui/Select.java
@@ -0,0 +1,16 @@
+package gui;
+
+public enum Select {
+ YES("Да"),
+ NO("Нет");
+
+ private String res;
+ Select(String response) {
+ res = response;
+ }
+
+ @Override
+ public String toString() {
+ return res;
+ }
+}
diff --git a/robots/src/log/LogChangeListener.java b/robots/src/main/java/log/LogChangeListener.java
similarity index 100%
rename from robots/src/log/LogChangeListener.java
rename to robots/src/main/java/log/LogChangeListener.java
diff --git a/robots/src/log/LogEntry.java b/robots/src/main/java/log/LogEntry.java
similarity index 100%
rename from robots/src/log/LogEntry.java
rename to robots/src/main/java/log/LogEntry.java
diff --git a/robots/src/log/LogLevel.java b/robots/src/main/java/log/LogLevel.java
similarity index 100%
rename from robots/src/log/LogLevel.java
rename to robots/src/main/java/log/LogLevel.java
diff --git a/robots/src/log/LogWindowSource.java b/robots/src/main/java/log/LogWindowSource.java
similarity index 100%
rename from robots/src/log/LogWindowSource.java
rename to robots/src/main/java/log/LogWindowSource.java
diff --git a/robots/src/log/Logger.java b/robots/src/main/java/log/Logger.java
similarity index 100%
rename from robots/src/log/Logger.java
rename to robots/src/main/java/log/Logger.java