Advertisement
shchuko

AppRunner

Nov 2nd, 2019
465
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.69 KB | None | 0 0
  1. package tester.kaspersky;
  2.  
  3. import tester.kaspersky.gui.EducateScreen.EducateScreen;
  4. import tester.kaspersky.gui.EducateScreen.EducateScreenActionCommands;
  5. import tester.kaspersky.gui.EducateScreen.EducateScreenBuilder;
  6. import tester.kaspersky.gui.MenuScreen.MenuScreen;
  7. import tester.kaspersky.gui.MenuScreen.MenuScreenActionCommands;
  8. import tester.kaspersky.gui.MenuScreen.MenuScreenBuilder;
  9. import tester.kaspersky.gui.TestBeginScreen.TestBeginScreen;
  10. import tester.kaspersky.gui.TestBeginScreen.TestBeginScreenActionCommands;
  11. import tester.kaspersky.gui.TestBeginScreen.TestBeginScreenBuilder;
  12. import tester.kaspersky.gui.TestResultsScreen.TestResultsScreen;
  13. import tester.kaspersky.gui.TestResultsScreen.TestResultsScreenActionCommands;
  14. import tester.kaspersky.gui.TestResultsScreen.TestResultsScreenBuilder;
  15. import tester.kaspersky.gui.TestScreen.TestScreen;
  16. import tester.kaspersky.gui.TestScreen.TestScreenActionsCommands;
  17. import tester.kaspersky.gui.TestScreen.TestScreenBuilder;
  18.  
  19. import javax.swing.*;
  20. import java.awt.*;
  21. import java.awt.event.ActionListener;
  22. import java.io.IOException;
  23. import java.nio.file.Files;
  24. import java.nio.file.Paths;
  25. import java.util.Stack;
  26. import java.util.stream.Stream;
  27.  
  28. import static tester.kaspersky.ResultsCsvWriter.WriteResults;
  29.  
  30. public class AppRunner extends JFrame {
  31.     public AppRunner() {
  32.         loadDataFromFiles();
  33.         setDefaultCloseOperation(EXIT_ON_CLOSE);
  34.         createMenuBar();
  35.         toMenuScreen();
  36.     }
  37.  
  38.     private void toMenuScreen() {
  39.         testStudentName = "";
  40.  
  41.         ActionListener actionListener = actionEvent -> {
  42.             switch (actionEvent.getActionCommand()) {
  43.                 case MenuScreenActionCommands.START_EDUCATE:
  44.                     toEducateScreen(1);
  45.                     break;
  46.                 case MenuScreenActionCommands.START_TESTING:
  47.                     toTestBeginScreen();
  48.                     break;
  49.             }
  50.         };
  51.  
  52.         MenuScreen menuScreen = new MenuScreenBuilder()
  53.             .addActionListener(actionListener)
  54.             .buildScreen();
  55.  
  56.         setContentPane(menuScreen.getPanel());
  57.         pack();
  58.         centring();
  59.         setVisible(true);
  60.     }
  61.  
  62.     private void toEducateScreen(int pageNo) {
  63.         ActionListener actionListener = actionEvent -> {
  64.             switch (actionEvent.getActionCommand()) {
  65.                 case EducateScreenActionCommands.NEXT_PAGE:
  66.                     toEducateScreen(educateScreen.getPageNo() + 1);
  67.                     break;
  68.                 case EducateScreenActionCommands.PREV_PAGE:
  69.                     toEducateScreen(educateScreen.getPageNo() - 1);
  70.                     break;
  71.                 case EducateScreenActionCommands.TO_SET_PAGE:
  72.                     toEducateScreen(educateScreen.getPageNo());
  73.                     break;
  74.                 case EducateScreenActionCommands.TO_MAIN_MENU:
  75.                     toMenuScreen();
  76.                     break;
  77.             }
  78.         };
  79.  
  80.         educateScreen = new EducateScreenBuilder()
  81.                 .addActionListener(actionListener)
  82.                 .addButtonsStatus(pageNo != 1)
  83.                 .addPagesInfo(pageNo, educatePagesCount)
  84.                 .addPicture("img/" + pageNo + ".png")
  85.                 .buildScreen();
  86.  
  87.         setContentPane(educateScreen.getPanel());
  88.         pack();
  89.         centring();
  90.         setVisible(true);
  91.     }
  92.  
  93.     private void toTestBeginScreen() {
  94.         ActionListener actionListener = actionEvent -> {
  95.             testStudentName = "";
  96.             if (TestBeginScreenActionCommands.BEGIN_TEST.equals(actionEvent.getActionCommand())) {
  97.                 if (testBeginScreen.getPersonName().trim().isEmpty()) {
  98.                     JOptionPane.showMessageDialog(this, "Имя не может быть пустым!",
  99.                             "Error", JOptionPane.WARNING_MESSAGE);
  100.                 } else {
  101.                     testStudentName = testBeginScreen.getPersonName().trim();
  102.                     toTestScreen(1);
  103.                 }
  104.             }
  105.         };
  106.  
  107.         testBeginScreen = new TestBeginScreenBuilder()
  108.                 .addActionListener(actionListener)
  109.                 .buildScreen();
  110.         setContentPane(testBeginScreen.getPanel());
  111.         pack();
  112.         centring();
  113.         setVisible(true);
  114.     }
  115.  
  116.     private void toTestScreen(int testNo) {
  117.         ActionListener actionListener = actionEvent -> {
  118.             switch (actionEvent.getActionCommand()) {
  119.                 case TestScreenActionsCommands.NEXT_TEST:
  120.                     answersStack.push(testScreen.isAnswerCorrect());
  121.                     toTestScreen(testScreen.getTestNo() + 1);
  122.                     break;
  123.                 case TestScreenActionsCommands.PREV_TEST:
  124.                     answersStack.pop();
  125.                     toTestScreen(testScreen.getTestNo() - 1);
  126.                     break;
  127.                 case TestScreenActionsCommands.FINISH_TEST:
  128.                     answersStack.push(testScreen.isAnswerCorrect());
  129.                     toTestFinishScreen();
  130.                     break;
  131.  
  132.             }
  133.         };
  134.  
  135.         String data = readFile("tests/" + testNo + ".txt").trim();
  136.         testScreen = new TestScreenBuilder()
  137.                 .addActionListener(actionListener)
  138.                 .addTestData(data)
  139.                 .addButtonsStates(testNo != 1, testNo != testQuestionsCount)
  140.                 .addTestNo(testNo)
  141.                 .buildScreen();
  142.  
  143.         setContentPane(testScreen.getPanel());
  144.         pack();
  145.         centring();
  146.         setVisible(true);
  147.     }
  148.  
  149.     private void toTestFinishScreen() {
  150.         int pointsCounter = 0;
  151.         while (!answersStack.empty()) {
  152.             if (answersStack.peek())
  153.                 ++pointsCounter;
  154.             answersStack.pop();
  155.         }
  156.  
  157.         try {
  158.             WriteResults(testStudentName, pointsCounter, testQuestionsCount);
  159.         } catch (IOException e) {
  160.             JOptionPane.showMessageDialog(this, "Не удалось сохранить результат",
  161.                     "Error", JOptionPane.ERROR_MESSAGE);
  162.         }
  163.         ActionListener actionListener = actionEvent -> {
  164.             switch (actionEvent.getActionCommand()) {
  165.                 case TestResultsScreenActionCommands.DO_RETEST:
  166.                     answersStack.empty();
  167.                     toTestBeginScreen();
  168.                     break;
  169.                 case TestResultsScreenActionCommands.TO_MAIN_MENU:
  170.                     answersStack.empty();
  171.                     testStudentName = "";
  172.                     toMenuScreen();
  173.                     break;
  174.             }
  175.         };
  176.  
  177.         testResultsScreen = new TestResultsScreenBuilder()
  178.                 .addActionListener(actionListener)
  179.                 .addPointsData(pointsCounter, testQuestionsCount)
  180.                 .buildScreen();
  181.  
  182.         setContentPane(testResultsScreen.getPanel());
  183.         pack();
  184.         centring();
  185.         setVisible(true);
  186.     }
  187.  
  188.     private void centring() {
  189.         Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
  190.         setLocation(dim.width / 2 - getWidth() / 2,
  191.                 dim.height / 2 - getHeight() / 2);
  192.     }
  193.  
  194.     private void createMenuBar() {
  195.         JMenu file = new JMenu("Файл");
  196.         JMenuItem fileToMainScreen = new JMenuItem("Перейти в главное меню");
  197.         fileToMainScreen.addActionListener(actionEvent -> toMenuScreen());
  198.         file.add(fileToMainScreen);
  199.  
  200.         JMenuItem fileExit = new JMenuItem("Выход");
  201.         fileExit.addActionListener(actionEvent -> terminate());
  202.         file.add(fileExit);
  203.  
  204.  
  205.         JMenu help = new JMenu("Справка");
  206.         JMenuItem helpAbout = new JMenuItem("О программе");
  207.         helpAbout.addActionListener(actionEvent -> aboutProgramDialog());
  208.         help.add(helpAbout);
  209.  
  210.         JMenuBar menuBar = new JMenuBar();
  211.         menuBar.add(file);
  212.         menuBar.add(help);
  213.         setJMenuBar(menuBar);
  214.     }
  215.  
  216.     private void aboutProgramDialog() {
  217.         String about = "<html>" + "Обучающий комплекс по настройке средства антивирусной защиты информации<br>" +
  218.                 "Kaspersky Endpoint Security 10 для Windows" + "<div align =\"left\"> " +
  219.                 "<br>Стасюк Иван,<br>2019" + "</div>" + "</html>";
  220.         JOptionPane.showMessageDialog(this, about, "О программе", JOptionPane.INFORMATION_MESSAGE);
  221.     }
  222.  
  223.     private void educateScreen() {
  224.         System.out.println(educateScreen.getPageNo());
  225.     }
  226.  
  227.     private void terminate() {
  228.         dispose();
  229.         System.exit(0);
  230.     }
  231.  
  232.     private String readFile(String filePath) {
  233.         StringBuilder contentBuilder = new StringBuilder();
  234.         try (Stream<String> stream = Files.lines(Paths.get(filePath))) {
  235.             stream.forEach(s -> contentBuilder.append(s).append("\n"));
  236.         }
  237.         catch (IOException e)
  238.         {
  239.             e.printStackTrace();
  240.             terminate();
  241.         }
  242.  
  243.         return contentBuilder.toString();
  244.     }
  245.  
  246.     private void loadDataFromFiles() {
  247.         String[] strings = readFile("img/imgProps.txt").split("=");
  248.         educatePagesCount = Integer.parseInt(strings[1].trim());
  249.  
  250.         strings = readFile("tests/testsProps.txt").split("=");
  251.         testQuestionsCount = Integer.parseInt(strings[1].trim());
  252.     }
  253.  
  254.  
  255.     private EducateScreen educateScreen;
  256.     private int educatePagesCount;
  257.  
  258.     private TestBeginScreen testBeginScreen;
  259.     private TestScreen testScreen;
  260.     private int testQuestionsCount;
  261.     private Stack<Boolean> answersStack = new Stack<>();
  262.     private TestResultsScreen testResultsScreen;
  263.     private String testStudentName;
  264. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement