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.model.accessible.CallableFile;
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.logging.log4j.LogManager;
20  import org.apache.logging.log4j.Logger;
21  
22  import javax.swing.*;
23  import java.awt.*;
24  import java.awt.event.ActionEvent;
25  import java.awt.event.ActionListener;
26  import java.util.Arrays;
27  import java.util.List;
28  
29  /**
30   * Manager to read a file from the host.
31   */
32  public class ManagerFile extends AbstractManagerList {
33  
34      private static final Logger LOGGER = LogManager.getRootLogger();
35  
36      /**
37       * Create the manager panel to read a file.
38       */
39      public ManagerFile() {
40          super("swing/list/file.txt");
41          this.buildRunButton("FILE_RUN_BUTTON_LABEL", "FILE_RUN_BUTTON_TOOLTIP");
42          this.run.setEnabled(false);
43          this.run.addActionListener(new ActionFile());
44          this.buildPrivilege();
45          this.add(this.lastLine, BorderLayout.SOUTH);
46      }
47  
48      private class ActionFile implements ActionListener {
49          @Override
50          public void actionPerformed(ActionEvent e) {
51              if (ManagerFile.this.listPaths.getSelectedValuesList().isEmpty()) {
52                  LOGGER.log(LogLevelUtil.CONSOLE_ERROR, "Select in the list at least one file to read");
53                  return;
54              }
55              if (!Arrays.asList(
56                  MediatorHelper.model().getMediatorEngine().getSqlite(),
57                  MediatorHelper.model().getMediatorEngine().getDerby(),
58                  MediatorHelper.model().getMediatorEngine().getH2(),
59                  MediatorHelper.model().getMediatorEngine().getHsqldb(),
60                  MediatorHelper.model().getMediatorEngine().getMysql(),
61                  MediatorHelper.model().getMediatorEngine().getPostgres(),
62                  MediatorHelper.model().getMediatorEngine().getSqlserver()
63              ).contains(MediatorHelper.model().getMediatorEngine().getEngine())) {
64                  LOGGER.log(
65                      LogLevelUtil.CONSOLE_ERROR,
66                      CallableFile.READ_FILE_NOT_IMPLEMENTED,
67                      MediatorHelper.model().getMediatorEngine().getEngine()
68                  );
69                  return;
70              }
71              new SwingWorker<>() {
72                  @Override
73                  protected Object doInBackground() {
74                      Thread.currentThread().setName("SwingWorkerManagerFile");
75                      if (ManagerFile.this.run.getState() == StateButton.STARTABLE) {
76                          ManagerFile.this.run.setText(I18nViewUtil.valueByKey("FILE_RUN_BUTTON_STOP"));
77                          ManagerFile.this.run.setState(StateButton.STOPPABLE);
78                          ManagerFile.this.horizontalGlue.setVisible(false);
79                          ManagerFile.this.progressBar.setVisible(true);
80                          try {
81                              List<String> filePaths = ManagerFile.this.listPaths.getSelectedValuesList().stream().map(ItemList::toString).toList();
82                              MediatorHelper.model().getResourceAccess().readFile(filePaths);
83                          } catch (InterruptedException e) {
84                              LOGGER.log(LogLevelUtil.IGNORE, e, e);
85                              Thread.currentThread().interrupt();
86                          } catch (Exception e) {
87                              LOGGER.log(LogLevelUtil.CONSOLE_ERROR, e, e);
88                          }
89                          ManagerFile.this.endProcess();
90                      } else {
91                          MediatorHelper.model().getResourceAccess().stopSearchFile();
92                          ManagerFile.this.run.setEnabled(false);
93                          ManagerFile.this.run.setState(StateButton.STOPPING);
94                      }
95                      return null;
96                  }
97              }.execute();
98          }
99      }
100 }