View Javadoc
1   package com.jsql.view.swing.panel.address;
2   
3   import com.jsql.util.I18nUtil;
4   import com.jsql.util.LogLevelUtil;
5   import com.jsql.view.swing.manager.util.StateButton;
6   import com.jsql.view.swing.panel.PanelAddressBar;
7   import com.jsql.view.swing.util.MediatorHelper;
8   import org.apache.commons.lang3.StringUtils;
9   import org.apache.logging.log4j.LogManager;
10  import org.apache.logging.log4j.Logger;
11  
12  import javax.swing.*;
13  import java.awt.event.ActionEvent;
14  import java.awt.event.ActionListener;
15  
16  public class ActionStart implements ActionListener {
17      
18      private static final Logger LOGGER = LogManager.getRootLogger();
19      
20      protected final PanelAddressBar panelAddressBar;
21      
22      public ActionStart(PanelAddressBar panelAddressBar) {
23          this.panelAddressBar = panelAddressBar;
24      }
25  
26      @Override
27      public void actionPerformed(ActionEvent e) {
28          // No injection running
29          if (this.panelAddressBar.getPanelTrailingAddress().getButtonStart().getState() == StateButton.STARTABLE) {
30              this.startInjection();
31          } else if (this.panelAddressBar.getPanelTrailingAddress().getButtonStart().getState() == StateButton.STOPPABLE) {
32              this.stopInjection();  // Injection currently running, stop the process
33          }
34      }
35      
36      protected void startInjection() {
37          if (MediatorHelper.model().isScanning()) {
38              LOGGER.log(LogLevelUtil.CONSOLE_ERROR, "Scan already ongoing, either wait or cancel the scan manually");
39              return;
40          }
41          int option = JOptionPane.OK_OPTION;
42          if (MediatorHelper.model().shouldErasePreviousInjection()) {  // Ask the user confirmation if injection already built
43              // Fix #93469: IllegalArgumentException on showConfirmDialog()
44              // Fix #33930: ClassCastException on showConfirmDialog()
45              // Implementation by sun.awt.image
46              try {
47                  option = JOptionPane.showConfirmDialog(
48                      MediatorHelper.frame(),
49                      I18nUtil.valueByKey("DIALOG_NEW_INJECTION_TEXT"),
50                      I18nUtil.valueByKey("DIALOG_NEW_INJECTION_TITLE"),
51                      JOptionPane.OK_CANCEL_OPTION
52                  );
53              } catch (IllegalArgumentException | ClassCastException e) {
54                  LOGGER.log(LogLevelUtil.CONSOLE_JAVA, e, e);
55              }
56          }
57  
58          if (option == JOptionPane.OK_OPTION) {  // Then start injection
59              this.panelAddressBar.getPanelTrailingAddress().getButtonStart().setToolTipText(I18nUtil.valueByKey("BUTTON_STOP_TOOLTIP"));
60              this.panelAddressBar.getPanelTrailingAddress().getButtonStart().setInjectionRunning();
61              this.panelAddressBar.getPanelTrailingAddress().getLoader().setVisible(true);
62  
63              MediatorHelper.frame().resetInterface();  // Erase everything in the view from a previous injection
64              var selection = this.panelAddressBar.getPanelTrailingAddress().getGroupRadio().getSelection();
65              String selectionCommand;
66              if (selection != null) {  // effectively final
67                  selectionCommand = selection.getActionCommand();
68              } else {
69                  selectionCommand = StringUtils.EMPTY;
70              }
71              MediatorHelper.model().getMediatorUtils().parameterUtil().controlInput(
72                  selectionCommand,
73                  this.panelAddressBar.getTextFieldAddress().getText().trim(),
74                  this.panelAddressBar.getTextFieldRequest().getText().trim(),
75                  this.panelAddressBar.getTextFieldHeader().getText().trim(),
76                  this.panelAddressBar.getMethodInjection(),
77                  this.panelAddressBar.getTypeRequest(),
78                  false
79              );
80          }
81      }
82      
83      private void stopInjection() {
84          this.panelAddressBar.getPanelTrailingAddress().getLoader().setVisible(false);
85          this.panelAddressBar.getPanelTrailingAddress().getButtonStart().setInjectionStopping();
86          MediatorHelper.model().setIsStoppedByUser(true);
87      }
88  }