View Javadoc
1   /*******************************************************************************
2    * Copyhacked (H) 2012-2025.
3    * This program and the accompanying materials
4    * are made available under no term at all, use it like
5    * you want, but share and discuss it
6    * every time possible with every body.
7    * 
8    * Contributors:
9    *      ron190 at ymail dot com - initial implementation
10   ******************************************************************************/
11  package com.jsql.view.swing.manager;
12  
13  import com.jsql.util.I18nUtil;
14  import com.jsql.util.LogLevelUtil;
15  import com.jsql.view.swing.list.ItemList;
16  import com.jsql.view.swing.manager.util.StateButton;
17  import com.jsql.view.swing.util.I18nViewUtil;
18  import com.jsql.view.swing.util.MediatorHelper;
19  import org.apache.commons.lang3.StringUtils;
20  import org.apache.logging.log4j.LogManager;
21  import org.apache.logging.log4j.Logger;
22  
23  import java.awt.*;
24  import java.util.stream.Collectors;
25  
26  /**
27   * Manager to display webpages frequently used as backoffice administration.
28   */
29  public class ManagerAdminPage extends AbstractManagerList {
30      
31      private static final Logger LOGGER = LogManager.getRootLogger();
32  
33      /**
34       * Create admin page finder.
35       */
36      public ManagerAdminPage() {
37          super("swing/list/admin-page.txt");
38  
39          this.buildRunButton("ADMIN_PAGE_RUN_BUTTON_LABEL", "ADMIN_PAGE_RUN_BUTTON_TOOLTIP");
40          this.run.setName("runManagerAdminPage");
41          this.run.addActionListener(actionEvent -> this.runSearch());
42          this.listPaths.setName("listManagerAdminPage");  // no tooltip, too annoying
43  
44          this.lastLine.add(this.horizontalGlue);
45          this.lastLine.add(this.progressBar);
46          this.lastLine.add(this.run);
47          this.add(this.lastLine, BorderLayout.SOUTH);
48      }
49  
50      private void runSearch() {
51          if (this.listPaths.getSelectedValuesList().isEmpty()) {
52              LOGGER.log(LogLevelUtil.CONSOLE_ERROR, "Select at least one admin page in the list");
53              return;
54          }
55          
56          String urlAddressBar = MediatorHelper.panelAddressBar().getTextFieldAddress().getText();
57          if (!urlAddressBar.isEmpty() && !urlAddressBar.matches("(?i)^https?://.*")) {
58              if (!urlAddressBar.matches("(?i)^\\w+://.*")) {
59                  LOGGER.log(LogLevelUtil.CONSOLE_INFORM, () -> I18nUtil.valueByKey("LOG_ADMIN_NO_PROTOCOL"));
60                  urlAddressBar = "http://"+ urlAddressBar;
61              } else {
62                  LOGGER.log(LogLevelUtil.CONSOLE_INFORM, () -> I18nUtil.valueByKey("LOG_ADMIN_UNKNOWN_PROTOCOL"));
63                  return;
64              }
65          }
66          
67          String urlFinal = urlAddressBar;
68          new Thread(() -> this.searchAdminPages(urlFinal), "ThreadAdminPage").start();
69      }
70  
71      private void searchAdminPages(String urlAddressBar) {
72          if (this.run.getState() == StateButton.STARTABLE) {
73              if (StringUtils.isEmpty(urlAddressBar)) {
74                  LOGGER.log(LogLevelUtil.CONSOLE_ERROR, "Missing URL in address bar");
75              } else {
76                  LOGGER.log(LogLevelUtil.CONSOLE_DEFAULT, "{} admin pages...", () -> I18nUtil.valueByKey("LOG_CHECKING"));
77                  this.run.setText(I18nViewUtil.valueByKey("ADMIN_PAGE_RUN_BUTTON_STOP"));
78                  this.run.setState(StateButton.STOPPABLE);
79                  this.progressBar.setVisible(true);
80                  this.horizontalGlue.setVisible(false);
81                  MediatorHelper.model().getResourceAccess().createAdminPages(
82                      urlAddressBar,
83                      this.listPaths.getSelectedValuesList().stream().map(ItemList::toString).collect(Collectors.toList())
84                  );
85                  this.endProcess();
86              }
87          } else if (this.run.getState() == StateButton.STOPPABLE) {
88              MediatorHelper.model().getResourceAccess().stopSearchAdmin();
89              this.run.setEnabled(false);
90              this.run.setState(StateButton.STOPPING);
91          }
92      }
93  }