diff --git a/src/main/java/backupmanager/Controllers/BackupProgressController.java b/src/main/java/backupmanager/Controllers/BackupProgressController.java
deleted file mode 100644
index fa4d3b0..0000000
--- a/src/main/java/backupmanager/Controllers/BackupProgressController.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package backupmanager.Controllers;
-
-import backupmanager.Services.ZippingThread;
-
-public class BackupProgressController {
- public void cancelBackup() {
- ZippingThread.stopExecutorService(1);
- }
-}
diff --git a/src/main/java/backupmanager/Controllers/EntryUserController.java b/src/main/java/backupmanager/Controllers/EntryUserController.java
new file mode 100644
index 0000000..5e0ed2c
--- /dev/null
+++ b/src/main/java/backupmanager/Controllers/EntryUserController.java
@@ -0,0 +1,20 @@
+package backupmanager.Controllers;
+
+import javax.swing.JOptionPane;
+
+import backupmanager.Email.EmailValidator;
+import backupmanager.Enums.TranslationLoaderEnum.TranslationCategory;
+import backupmanager.Enums.TranslationLoaderEnum.TranslationKey;
+
+public class EntryUserController {
+ public boolean isInputOkAndShowErrorIfNecessary(javax.swing.JDialog dialog, String name, String surname, String email) {
+ if (name.isEmpty() || surname.isEmpty() || email.isEmpty()) {
+ JOptionPane.showMessageDialog(dialog, TranslationCategory.USER_DIALOG.getTranslation(TranslationKey.ERROR_MESSAGE_FOR_MISSING_DATA), TranslationCategory.DIALOGS.getTranslation(TranslationKey.ERROR_GENERIC_TITLE), JOptionPane.ERROR_MESSAGE);
+ return false;
+ } else if (!EmailValidator.isValidEmail(email)) {
+ JOptionPane.showMessageDialog(dialog, TranslationCategory.USER_DIALOG.getTranslation(TranslationKey.ERROR_MESSAGE_FOR_WRONG_EMAIL), TranslationCategory.DIALOGS.getTranslation(TranslationKey.ERROR_GENERIC_TITLE), JOptionPane.ERROR_MESSAGE);
+ return false;
+ }
+ return true;
+ }
+}
diff --git a/src/main/java/backupmanager/Controllers/TimePickerController.java b/src/main/java/backupmanager/Controllers/TimePickerController.java
new file mode 100644
index 0000000..587c89c
--- /dev/null
+++ b/src/main/java/backupmanager/Controllers/TimePickerController.java
@@ -0,0 +1,56 @@
+package backupmanager.Controllers;
+
+import javax.swing.JOptionPane;
+
+import backupmanager.Entities.TimeInterval;
+import backupmanager.Enums.TranslationLoaderEnum.TranslationCategory;
+import backupmanager.Enums.TranslationLoaderEnum.TranslationKey;
+
+public class TimePickerController {
+
+ private TimeInterval timeInterval;
+ private boolean closeOk;
+
+ public TimePickerController(TimeInterval timeInterval, boolean closeOk) {
+ this.timeInterval = timeInterval;
+ this.closeOk = closeOk;
+ }
+
+ public void handleOkButton(javax.swing.JDialog dialog, int days, int hours, int minutes) {
+ if (isLongTimeCorrect(days, hours, minutes)) {
+ if (isShortTimeCorrect(days, hours) && !showWarningMessageForShortTimeAndGetIfItOkayResponse(dialog))
+ return;
+
+ timeInterval = new TimeInterval(days, hours, minutes);
+ closeOk = true;
+ dialog.dispose();
+ }
+ else
+ showErrorMessageForLongTime(dialog);
+ }
+
+ public TimeInterval getTimeInterval() {
+ if (closeOk) return timeInterval;
+ return null;
+ }
+ public void setCloseOk(boolean closeOk) { this.closeOk = closeOk; }
+
+
+ private boolean isLongTimeCorrect(int days, int hours, int minutes) {
+ return days >= 0 && hours >= 0 && hours <= 23 && minutes >= 0 && minutes <= 59 &&
+ (days != 0 || hours != 0 || minutes != 0);
+ }
+
+ private boolean isShortTimeCorrect(int days, int hours) {
+ return days == 0 && hours == 0;
+ }
+
+ private void showErrorMessageForLongTime(javax.swing.JDialog dialog) {
+ JOptionPane.showMessageDialog(dialog, TranslationCategory.DIALOGS.getTranslation(TranslationKey.ERROR_WRONG_TIME_INTERVAL), TranslationCategory.DIALOGS.getTranslation(TranslationKey.ERROR_GENERIC_TITLE), JOptionPane.ERROR_MESSAGE);
+ }
+
+ private boolean showWarningMessageForShortTimeAndGetIfItOkayResponse(javax.swing.JDialog dialog) {
+ int response = JOptionPane.showConfirmDialog(dialog, TranslationCategory.DIALOGS.getTranslation(TranslationKey.WARNING_SHORT_TIME_INTERVAL_MESSAGE), TranslationCategory.DIALOGS.getTranslation(TranslationKey.WARNING_GENERIC_TITLE), JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);
+ return response == JOptionPane.YES_OPTION;
+ }
+}
diff --git a/src/main/java/backupmanager/Dialogs/EntryUserDialog.java b/src/main/java/backupmanager/Dialogs/EntryUserDialog.java
index 3c6edcb..c8e1d78 100644
--- a/src/main/java/backupmanager/Dialogs/EntryUserDialog.java
+++ b/src/main/java/backupmanager/Dialogs/EntryUserDialog.java
@@ -1,9 +1,8 @@
package backupmanager.Dialogs;
-import javax.swing.JOptionPane;
import backupmanager.LimitDocument;
-import backupmanager.Email.EmailValidator;
+import backupmanager.Controllers.EntryUserController;
import backupmanager.Entities.User;
import backupmanager.Enums.TranslationLoaderEnum.TranslationCategory;
import backupmanager.Enums.TranslationLoaderEnum.TranslationKey;
@@ -11,9 +10,13 @@
public class EntryUserDialog extends javax.swing.JDialog {
private User user;
+ private final EntryUserController userController;
public EntryUserDialog(java.awt.Frame parent, boolean modal) {
super(parent, modal);
+
+ userController = new EntryUserController();
+
initComponents();
nameTextField.setDocument(new LimitDocument(20));
@@ -142,13 +145,8 @@ private void okBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:e
String surname = surnameTextField.getText();
String email = emailTextField.getText();
- if (name.isEmpty() || surname.isEmpty() || email.isEmpty()) {
- JOptionPane.showMessageDialog(this, TranslationCategory.USER_DIALOG.getTranslation(TranslationKey.ERROR_MESSAGE_FOR_MISSING_DATA), TranslationCategory.DIALOGS.getTranslation(TranslationKey.ERROR_GENERIC_TITLE), JOptionPane.ERROR_MESSAGE);
+ if (!userController.isInputOkAndShowErrorIfNecessary(this, name, surname, email))
return;
- } else if (!EmailValidator.isValidEmail(email)) {
- JOptionPane.showMessageDialog(this, TranslationCategory.USER_DIALOG.getTranslation(TranslationKey.ERROR_MESSAGE_FOR_WRONG_EMAIL), TranslationCategory.DIALOGS.getTranslation(TranslationKey.ERROR_GENERIC_TITLE), JOptionPane.ERROR_MESSAGE);
- return;
- }
user = new User(name, surname, email);
diff --git a/src/main/java/backupmanager/Dialogs/TimePicker.java b/src/main/java/backupmanager/Dialogs/TimePicker.java
index bae9f9e..7d13612 100644
--- a/src/main/java/backupmanager/Dialogs/TimePicker.java
+++ b/src/main/java/backupmanager/Dialogs/TimePicker.java
@@ -5,21 +5,19 @@
import backupmanager.Controllers.GuiController;
import backupmanager.Entities.TimeInterval;
-import javax.swing.JOptionPane;
+import backupmanager.Controllers.TimePickerController;
public class TimePicker extends javax.swing.JDialog {
- private TimeInterval timeInterval;
- private boolean closeOk;
+ private final TimePickerController timePickerController;
public TimePicker(java.awt.Dialog parent, TimeInterval timeInterval, boolean modal) {
super(parent, modal);
- closeOk = false;
+ timePickerController = new TimePickerController(timeInterval, false);
initComponents();
- this.timeInterval = timeInterval;
if (timeInterval != null) {
daysSpinner.setValue(timeInterval.days());
hoursSpinner.setValue(timeInterval.hours());
@@ -32,8 +30,7 @@ public TimePicker(java.awt.Dialog parent, TimeInterval timeInterval, boolean mod
}
public TimeInterval getTimeInterval() {
- if (closeOk) return timeInterval;
- return null;
+ return timePickerController.getTimeInterval();
}
private void daysIntervalSpinnerChange() {
@@ -64,19 +61,6 @@ private void minutesIntervalSpinnerChange() {
}
}
- private boolean checkInputCorrectness() {
- Integer days = (Integer) daysSpinner.getValue();
- Integer hours = (Integer) hoursSpinner.getValue();
- Integer minutes = (Integer) minutesSpinner.getValue();
- return (days != null && days >= 0 && hours != null && hours >= 0 && hours <= 23 && minutes != null && minutes >= 0 && minutes <= 59 && (days != 0 || hours != 0 || minutes != 0));
- }
-
- private boolean checkShortTimeInterval() {
- Integer days = (Integer) daysSpinner.getValue();
- Integer hours = (Integer) hoursSpinner.getValue();
- return (days == 0 && hours == 0);
- }
-
private void mouseWeel(java.awt.event.MouseWheelEvent evt) {
javax.swing.JSpinner spinner = (javax.swing.JSpinner) evt.getSource();
int rotation = evt.getWheelRotation();
@@ -247,27 +231,11 @@ private void minutesSpinnerMouseWheelMoved(java.awt.event.MouseWheelEvent evt) {
}//GEN-LAST:event_minutesSpinnerMouseWheelMoved
private void btnOkActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnOkActionPerformed
- if (checkInputCorrectness()) {
-
- if (checkShortTimeInterval()) {
- // check for small time interval setted
- int response = JOptionPane.showConfirmDialog(this, TranslationCategory.DIALOGS.getTranslation(TranslationKey.WARNING_SHORT_TIME_INTERVAL_MESSAGE), TranslationCategory.DIALOGS.getTranslation(TranslationKey.WARNING_GENERIC_TITLE), JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);
- if (response != JOptionPane.YES_OPTION) {
- return;
- }
- }
-
- timeInterval = new TimeInterval((int)daysSpinner.getValue(), (int)hoursSpinner.getValue(), (int)minutesSpinner.getValue());
- closeOk = true;
- this.dispose();
- }
- else {
- JOptionPane.showMessageDialog(this, TranslationCategory.DIALOGS.getTranslation(TranslationKey.ERROR_WRONG_TIME_INTERVAL), TranslationCategory.DIALOGS.getTranslation(TranslationKey.ERROR_GENERIC_TITLE), JOptionPane.ERROR_MESSAGE);
- }
+ timePickerController.handleOkButton(this, (Integer) daysSpinner.getValue(), (Integer) hoursSpinner.getValue(), (Integer) minutesSpinner.getValue());
}//GEN-LAST:event_btnOkActionPerformed
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
- closeOk = false;
+ timePickerController.setCloseOk(false);
this.dispose();
}//GEN-LAST:event_jButton2ActionPerformed
diff --git a/src/main/java/backupmanager/GUI/BackupManagerGUI.form b/src/main/java/backupmanager/GUI/BackupManagerGUI.form
index 0126731..45880ce 100644
--- a/src/main/java/backupmanager/GUI/BackupManagerGUI.form
+++ b/src/main/java/backupmanager/GUI/BackupManagerGUI.form
@@ -464,7 +464,7 @@
-
+
diff --git a/src/main/java/backupmanager/GUI/BackupManagerGUI.java b/src/main/java/backupmanager/GUI/BackupManagerGUI.java
index 91fb32b..a2cdc72 100644
--- a/src/main/java/backupmanager/GUI/BackupManagerGUI.java
+++ b/src/main/java/backupmanager/GUI/BackupManagerGUI.java
@@ -1,14 +1,11 @@
package backupmanager.GUI;
-import java.awt.Dimension;
-import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
-import java.util.Locale;
import javax.swing.AbstractAction;
import javax.swing.ActionMap;
@@ -27,17 +24,14 @@
import com.formdev.flatlaf.FlatClientProperties;
import backupmanager.Controllers.GuiController;
-import backupmanager.Dialogs.EntryUserDialog;
-import backupmanager.Email.EmailSender;
import backupmanager.Entities.ConfigurationBackup;
import backupmanager.Entities.Confingurations;
-import backupmanager.Entities.User;
import backupmanager.Enums.ConfigKey;
-import backupmanager.Enums.LanguagesEnum;
import backupmanager.Enums.MenuItems;
import backupmanager.Enums.TranslationLoaderEnum;
import backupmanager.Enums.TranslationLoaderEnum.TranslationCategory;
import backupmanager.Enums.TranslationLoaderEnum.TranslationKey;
+import backupmanager.GUI.Controllers.BackupManagerController;
import backupmanager.GUI.Controllers.BackupMenuController;
import backupmanager.GUI.Controllers.BackupPopupController;
import backupmanager.Helpers.BackupHelper;
@@ -48,22 +42,18 @@
import backupmanager.Managers.ExportManager;
import backupmanager.Managers.ThemeManager;
import backupmanager.Services.BackupObserver;
-import backupmanager.Services.RunningBackupService;
+import backupmanager.Services.BackupService;
import backupmanager.Table.BackupTable;
import backupmanager.Table.BackupTableModel;
import backupmanager.Table.CheckboxCellRenderer;
import backupmanager.Table.StripedRowRenderer;
-import backupmanager.Table.TableDataManager;
import backupmanager.Widgets.SideMenuPanel;
import backupmanager.database.Repositories.BackupConfigurationRepository;
-import backupmanager.database.Repositories.UserRepository;
-/**
- * @author Dennis Turco
- */
public final class BackupManagerGUI extends javax.swing.JFrame {
private static final Logger logger = LoggerFactory.getLogger(BackupManagerGUI.class);
+ private final BackupManagerController backupManagerController;
private final BackupObserver observer;
public static List backups;
public static DefaultTableModel model;
@@ -78,6 +68,8 @@ public BackupManagerGUI() {
initComponents();
+ backupManagerController = new BackupManagerController(new BackupService());
+
sp = new SideMenuPanel(this);
this.setIconImage(GuiController.getIcon(this.getClass()));
@@ -95,7 +87,7 @@ public BackupManagerGUI() {
interruptBackupPopupItem.setEnabled(false);
setSvgImages();
- checkForFirstAccess();
+ backupManagerController.checkForFirstAccess(this);
jSeparator5.setVisible(false);
// TODO: remove this
@@ -104,41 +96,6 @@ public BackupManagerGUI() {
initSidebar();
}
- private void checkForFirstAccess() {
- logger.debug("Checking for first access");
- User user = UserRepository.getLastUser();
-
- if (user == null) { // first access
- setLanguageBasedOnPcLanguage();
- createNewUser();
- } else {
- logger.info("Current user: " + user.toString());
- }
- }
-
- private void createNewUser() {
- User newUser = null;
-
- while (newUser == null) {
- newUser = openUserDialogAndObtainTheResult();
- }
-
- UserRepository.insertUser(newUser);
-
- sendRegistrationEmail(newUser);
- }
-
- private User openUserDialogAndObtainTheResult() {
- EntryUserDialog userDialog = new EntryUserDialog(this, true);
- userDialog.setVisible(true);
- return userDialog.getUser();
- }
-
- private void sendRegistrationEmail(User user) {
- EmailSender.sendUserCreationEmail(user);
- EmailSender.sendConfirmEmailToUser(user);
- }
-
private void initSidebar() {
sp.setMain(null);
sp.setMinWidth(55);
@@ -148,24 +105,6 @@ private void initSidebar() {
sp.setResponsiveMinWidth(1300);
}
- private void setLanguageBasedOnPcLanguage() {
- Locale defaultLocale = Locale.getDefault();
- String language = defaultLocale.getLanguage();
-
- logger.info("Setting default language to: " + language);
-
- switch (language) {
- case "en" -> Confingurations.setLanguage(LanguagesEnum.ENG);
- case "it" -> Confingurations.setLanguage(LanguagesEnum.ITA);
- case "es" -> Confingurations.setLanguage(LanguagesEnum.ESP);
- case "de" -> Confingurations.setLanguage(LanguagesEnum.DEU);
- case "fr" -> Confingurations.setLanguage(LanguagesEnum.FRA);
- default -> Confingurations.setLanguage(LanguagesEnum.ENG);
- }
-
- reloadPreferences();
- }
-
public void showWindow() {
setVisible(true);
toFront();
@@ -173,11 +112,8 @@ public void showWindow() {
}
private void setScreenSize() {
- Dimension size = Toolkit.getDefaultToolkit().getScreenSize();
- int width = Math.min((int) size.getWidth(), Integer.parseInt(ConfigKey.GUI_WIDTH.getValue()));
- int height = Math.min((int) size.getHeight(), Integer.parseInt(ConfigKey.GUI_HEIGHT.getValue()));
-
- this.setSize(width,height);
+ int[] screenSize = backupManagerController.getScreenSize();
+ this.setSize(screenSize[0], screenSize[1]);
}
public void reloadPreferences() {
@@ -228,13 +164,7 @@ private void displayBackupList() {
actionMap.put("enterKey", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
- int selectedRow = backupTable.getSelectedRow();
- if (selectedRow == -1) return;
-
- logger.debug("Enter key pressed on row: " + selectedRow);
- BackupHelper.openBackupByName((String) backupTable.getValueAt(selectedRow, 0), main);
-
- BackupHelper.openBackupEntryDialog(main);
+ backupManagerController.handleEnterKeyPressOnTable(main, backupTable);
}
});
@@ -243,19 +173,7 @@ public void actionPerformed(ActionEvent e) {
actionMap.put("deleteKey", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
- int[] selectedRows = backupTable.getSelectedRows();
- if (selectedRows.length == 0) return;
-
- logger.debug("Delete key pressed on rows: " + Arrays.toString(selectedRows));
-
- int response = JOptionPane.showConfirmDialog(null, TranslationCategory.DIALOGS.getTranslation(TranslationKey.CONFIRMATION_DELETION_MESSAGE), TranslationCategory.DIALOGS.getTranslation(TranslationKey.CONFIRMATION_DELETION_TITLE), JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
- if (response != JOptionPane.YES_OPTION) {
- return;
- }
-
- for (int row : selectedRows) {
- BackupHelper.deleteBackup(row, backupTable, false);
- }
+ backupManagerController.handleDeleteKeyPressOnTable(backupTable);
}
});
@@ -288,25 +206,6 @@ public void mouseClicked(java.awt.event.MouseEvent evt) {
scrollPane.setViewportView(table); // Replace the table in the scroll pane
}
- private void researchInTable() {
- List tempBackups = new ArrayList<>();
-
- String research = researchField.getText();
-
- for (ConfigurationBackup backup : backups) {
- if (backup.getName().contains(research) ||
- backup.getTargetPath().contains(research) ||
- backup.getDestinationPath().contains(research) ||
- (backup.getLastBackupDate() != null && backup.getLastBackupDate().toString().contains(research)) ||
- (backup.getNextBackupDate() != null && backup.getNextBackupDate().toString().contains(research)) ||
- (backup.getTimeIntervalBackup() != null && backup.getTimeIntervalBackup().toString().contains(research))) {
- tempBackups.add(backup);
- }
- }
-
- TableDataManager.updateTableWithNewBackupList(tempBackups, formatter);
- }
-
/**
* This method is called from within the constructor to initialize the form.
*
@@ -536,8 +435,8 @@ public void actionPerformed(java.awt.event.ActionEvent evt) {
researchField.setToolTipText("Research bar");
researchField.addKeyListener(new java.awt.event.KeyAdapter() {
- public void keyTyped(java.awt.event.KeyEvent evt) {
- researchFieldKeyTyped(evt);
+ public void keyReleased(java.awt.event.KeyEvent evt) {
+ researchFieldKeyReleased(evt);
}
});
@@ -998,10 +897,6 @@ private void DeletePopupItemActionPerformed(java.awt.event.ActionEvent evt) {//G
BackupPopupController.popupItemDelete(selectedRow, backupTable);
}//GEN-LAST:event_DeletePopupItemActionPerformed
- private void researchFieldKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_researchFieldKeyTyped
- researchInTable();
- }//GEN-LAST:event_researchFieldKeyTyped
-
private void tableMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tableMouseClicked
selectedRow = table.rowAtPoint(evt.getPoint()); // get index of the row
@@ -1009,20 +904,16 @@ private void tableMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event
table.clearSelection(); // deselect any selected row
detailsLabel.setText(""); // clear the label
} else {
- // get correct backup
String backupName = (String) backupTable.getValueAt(selectedRow, 0);
- ConfigurationBackup backup = ConfigurationBackup.getBackupByName(backups, backupName);
-
logger.debug("Selected backup: " + backupName);
- // Handling right mouse button click
if (SwingUtilities.isRightMouseButton(evt)) {
- logger.info("Right click on row: " + selectedRow);
- AutoBackupMenuItem.setSelected(backup.isAutomatic());
+ logger.debug("Right click on row: " + selectedRow);
+ AutoBackupMenuItem.setSelected(backupManagerController.isAutomaticBackup(backupName));
table.setRowSelectionInterval(selectedRow, selectedRow); // select clicked row
- TablePopup.show(evt.getComponent(), evt.getX(), evt.getY()); // show popup
+ TablePopup.show(evt.getComponent(), evt.getX(), evt.getY());
- boolean isRunning = RunningBackupService.getRunningBackupByName(backupName).isPresent();
+ boolean isRunning = backupManagerController.isBackupRunning(backupName);
DeletePopupItem.setEnabled(!isRunning);
interruptBackupPopupItem.setEnabled(isRunning);
@@ -1030,38 +921,12 @@ private void tableMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event
// Handling left mouse button double-click
else if (SwingUtilities.isLeftMouseButton(evt) && evt.getClickCount() == 2) {
- logger.info("Double-click on row: " + selectedRow);
- BackupHelper.openBackupByName(backupName, this);
+ backupManagerController.openBackup(backupName, this);
}
- // Handling single left mouse button click
else if (SwingUtilities.isLeftMouseButton(evt)) {
- String backupNameStr = TranslationCategory.BACKUP_LIST.getTranslation(TranslationKey.BACKUP_NAME_DETAIL);
- String initialPathStr = TranslationCategory.BACKUP_LIST.getTranslation(TranslationKey.INITIAL_PATH_DETAIL);
- String destinationPathStr = TranslationCategory.BACKUP_LIST.getTranslation(TranslationKey.DESTINATION_PATH_DETAIL);
- String lastBackupStr = TranslationCategory.BACKUP_LIST.getTranslation(TranslationKey.LAST_BACKUP_DETAIL);
- String nextBackupStr = TranslationCategory.BACKUP_LIST.getTranslation(TranslationKey.NEXT_BACKUP_DATE_DETAIL);
- String timeIntervalBackupStr = TranslationCategory.BACKUP_LIST.getTranslation(TranslationKey.TIME_INTERVAL_DETAIL);
- String creationDateStr = TranslationCategory.BACKUP_LIST.getTranslation(TranslationKey.CREATION_DATE_DETAIL);
- String lastUpdateDateStr = TranslationCategory.BACKUP_LIST.getTranslation(TranslationKey.LAST_UPDATE_DATE_DETAIL);
- String backupCountStr = TranslationCategory.BACKUP_LIST.getTranslation(TranslationKey.BACKUP_COUNT_DETAIL);
- String notesStr = TranslationCategory.BACKUP_LIST.getTranslation(TranslationKey.NOTES_DETAIL);
- String maxBackupsToKeepStr = TranslationCategory.BACKUP_LIST.getTranslation(TranslationKey.MAX_BACKUPS_TO_KEEP_DETAIL);
-
- detailsLabel.setText(
- "" + backupNameStr + ": " + backup.getName() + ", " +
- "" + initialPathStr + ": " + backup.getTargetPath() + ", " +
- "" + destinationPathStr + ": " + backup.getDestinationPath() + ", " +
- "" + lastBackupStr + ": " + (backup.getLastBackupDate() != null ? backup.getLastBackupDate().format(formatter) : "") + ", " +
- "" + nextBackupStr + ": " + (backup.getNextBackupDate() != null ? backup.getNextBackupDate().format(formatter) : "_") + ", " +
- "" + timeIntervalBackupStr + ": " + (backup.getTimeIntervalBackup() != null ? backup.getTimeIntervalBackup().toString() : "_") + ", " +
- "" + creationDateStr + ": " + (backup.getCreationDate() != null ? backup.getCreationDate().format(formatter) : "_") + ", " +
- "" + lastUpdateDateStr + ": " + (backup.getLastUpdateDate() != null ? backup.getLastUpdateDate().format(formatter) : "_") + ", " +
- "" + backupCountStr + ": " + (backup.getCount()) + ", " +
- "" + maxBackupsToKeepStr + ": " + (backup.getMaxToKeep()) + ", " +
- "" + notesStr + ": " + (backup.getNotes()) +
- ""
- );
+ String details = backupManagerController.getBackupDetails(backupName);
+ detailsLabel.setText(details);
}
}
}//GEN-LAST:event_tableMouseClicked
@@ -1150,6 +1015,11 @@ private void MenuBuyMeACoffeDonateActionPerformed(java.awt.event.ActionEvent evt
BackupMenuController.menuItemDonateViaBuymeacoffe();
}//GEN-LAST:event_MenuBuyMeACoffeDonateActionPerformed
+ private void researchFieldKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_researchFieldKeyReleased
+ String research = researchField.getText();
+ backupManagerController.researchInTable(research);
+ }//GEN-LAST:event_researchFieldKeyReleased
+
private void setTranslations() {
// update table translations
if (backups != null)
diff --git a/src/main/java/backupmanager/GUI/BackupProgressGUI.java b/src/main/java/backupmanager/GUI/BackupProgressGUI.java
index fa52a31..0684047 100644
--- a/src/main/java/backupmanager/GUI/BackupProgressGUI.java
+++ b/src/main/java/backupmanager/GUI/BackupProgressGUI.java
@@ -1,11 +1,9 @@
package backupmanager.GUI;
-import javax.swing.JOptionPane;
-
-import backupmanager.Controllers.BackupProgressController;
import backupmanager.Controllers.GuiController;
import backupmanager.Enums.TranslationLoaderEnum.TranslationCategory;
import backupmanager.Enums.TranslationLoaderEnum.TranslationKey;
+import backupmanager.GUI.Controllers.BackupProgressController;
public class BackupProgressGUI extends javax.swing.JDialog {
@@ -153,11 +151,7 @@ private void closeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-F
}//GEN-LAST:event_closeButtonActionPerformed
private void CancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_CancelButtonActionPerformed
- int response = JOptionPane.showConfirmDialog(null, TranslationCategory.DIALOGS.getTranslation(TranslationKey.INTERRUPT_BACKUP_PROCESS_MESSAGE), TranslationCategory.DIALOGS.getTranslation(TranslationKey.CONFIRMATION_REQUIRED_TITLE), JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
- if (response == JOptionPane.YES_OPTION) {
- progressController.cancelBackup();
- this.dispose();
- }
+ progressController.handleCancelButtonRequest(this);
}//GEN-LAST:event_CancelButtonActionPerformed
private void setTranslations() {
diff --git a/src/main/java/backupmanager/GUI/Controllers/BackupManagerController.java b/src/main/java/backupmanager/GUI/Controllers/BackupManagerController.java
new file mode 100644
index 0000000..412014b
--- /dev/null
+++ b/src/main/java/backupmanager/GUI/Controllers/BackupManagerController.java
@@ -0,0 +1,166 @@
+package backupmanager.GUI.Controllers;
+
+import java.awt.Dimension;
+import java.awt.Toolkit;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Locale;
+
+import javax.swing.JOptionPane;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import backupmanager.Dialogs.EntryUserDialog;
+import backupmanager.Email.EmailSender;
+import backupmanager.Entities.ConfigurationBackup;
+import backupmanager.Entities.Confingurations;
+import backupmanager.Entities.User;
+import backupmanager.Enums.ConfigKey;
+import backupmanager.Enums.LanguagesEnum;
+import backupmanager.Enums.TranslationLoaderEnum.TranslationCategory;
+import backupmanager.Enums.TranslationLoaderEnum.TranslationKey;
+import backupmanager.GUI.BackupManagerGUI;
+import static backupmanager.GUI.BackupManagerGUI.backups;
+import backupmanager.Helpers.BackupHelper;
+import static backupmanager.Helpers.BackupHelper.formatter;
+import backupmanager.Services.BackupService;
+import backupmanager.Table.BackupTable;
+import backupmanager.Table.TableDataManager;
+import backupmanager.database.Repositories.UserRepository;
+
+public class BackupManagerController {
+
+ private static final Logger logger = LoggerFactory.getLogger(BackupManagerGUI.class);
+ private final BackupService backupService;
+
+ public BackupManagerController(BackupService backupService) {
+ this.backupService = backupService;
+ }
+
+ public void checkForFirstAccess(BackupManagerGUI mainGui) {
+ logger.debug("Checking for first access");
+ User user = UserRepository.getLastUser();
+
+ if (user == null) {
+ setLanguageBasedOnPcLanguage(mainGui);
+ createNewUser(mainGui);
+ } else {
+ logger.info("Current user: " + user.toString());
+ }
+ }
+
+ public int[] getScreenSize() {
+ Dimension size = Toolkit.getDefaultToolkit().getScreenSize();
+ int width = Math.min((int) size.getWidth(), Integer.parseInt(ConfigKey.GUI_WIDTH.getValue()));
+ int height = Math.min((int) size.getHeight(), Integer.parseInt(ConfigKey.GUI_HEIGHT.getValue()));
+ return new int[]{width, height};
+ }
+
+ public void researchInTable(String research) {
+ List tempBackups = new ArrayList<>();
+ research = research.toLowerCase();
+
+ for (ConfigurationBackup backup : backups) {
+ if (backup.getName().toLowerCase().contains(research) ||
+ backup.getTargetPath().toLowerCase().contains(research) ||
+ backup.getDestinationPath().toLowerCase().contains(research) ||
+ (backup.getLastBackupDate() != null && backup.getLastBackupDate().toString().toLowerCase().contains(research)) ||
+ (backup.getNextBackupDate() != null && backup.getNextBackupDate().toString().toLowerCase().contains(research)) ||
+ (backup.getTimeIntervalBackup() != null && backup.getTimeIntervalBackup().toString().toLowerCase().contains(research))) {
+ tempBackups.add(backup);
+ }
+ }
+
+ TableDataManager.updateTableWithNewBackupList(tempBackups, formatter);
+ }
+
+ public String getBackupDetails(String backupName) {
+ return backupService.getBackupDetails(backupName);
+ }
+
+ public void deleteBackups(List names) {
+ backupService.deleteBackups(names);
+ }
+
+ public boolean isBackupRunning(String name) {
+ return backupService.isRunning(name);
+ }
+
+ public boolean isAutomaticBackup(String backupName) {
+ ConfigurationBackup backup = ConfigurationBackup.getBackupByName(backups, backupName);
+ return backup != null && backup.isAutomatic();
+ }
+
+ public void openBackup(String name, java.awt.Frame frame) {
+ logger.info("Double-click on row: " + name);
+ BackupHelper.openBackupByName(name, frame);
+ }
+
+ public void handleEnterKeyPressOnTable(java.awt.Frame frame, BackupTable backupTable) {
+ int selectedRow = backupTable.getSelectedRow();
+ if (selectedRow == -1) return;
+
+ logger.debug("Enter key pressed on row: " + selectedRow);
+ BackupHelper.openBackupByName((String) backupTable.getValueAt(selectedRow, 0), frame);
+
+ BackupHelper.openBackupEntryDialog(frame);
+ }
+
+ public void handleDeleteKeyPressOnTable(BackupTable backupTable) {
+ int[] selectedRows = backupTable.getSelectedRows();
+ if (selectedRows.length == 0)
+ return;
+
+ logger.debug("Delete key pressed on rows: " + Arrays.toString(selectedRows));
+
+ int response = JOptionPane.showConfirmDialog(null, TranslationCategory.DIALOGS.getTranslation(TranslationKey.CONFIRMATION_DELETION_MESSAGE), TranslationCategory.DIALOGS.getTranslation(TranslationKey.CONFIRMATION_DELETION_TITLE), JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
+ if (response != JOptionPane.YES_OPTION)
+ return;
+
+ for (int row : selectedRows)
+ BackupHelper.deleteBackup(row, backupTable, false);
+ }
+
+ private void createNewUser(BackupManagerGUI mainGui) {
+ User newUser = null;
+
+ while (newUser == null) {
+ newUser = openUserDialogAndObtainTheResult(mainGui);
+ }
+
+ UserRepository.insertUser(newUser);
+
+ sendRegistrationEmail(newUser);
+ }
+
+ private void setLanguageBasedOnPcLanguage(BackupManagerGUI mainGui) {
+ Locale defaultLocale = Locale.getDefault();
+ String language = defaultLocale.getLanguage();
+
+ logger.info("Setting default language to: " + language);
+
+ switch (language) {
+ case "en" -> Confingurations.setLanguage(LanguagesEnum.ENG);
+ case "it" -> Confingurations.setLanguage(LanguagesEnum.ITA);
+ case "es" -> Confingurations.setLanguage(LanguagesEnum.ESP);
+ case "de" -> Confingurations.setLanguage(LanguagesEnum.DEU);
+ case "fr" -> Confingurations.setLanguage(LanguagesEnum.FRA);
+ default -> Confingurations.setLanguage(LanguagesEnum.ENG);
+ }
+
+ mainGui.reloadPreferences();
+ }
+
+ private User openUserDialogAndObtainTheResult(BackupManagerGUI mainGui) {
+ EntryUserDialog userDialog = new EntryUserDialog(mainGui, true);
+ userDialog.setVisible(true);
+ return userDialog.getUser();
+ }
+
+ private void sendRegistrationEmail(User user) {
+ EmailSender.sendUserCreationEmail(user);
+ EmailSender.sendConfirmEmailToUser(user);
+ }
+}
diff --git a/src/main/java/backupmanager/GUI/Controllers/BackupProgressController.java b/src/main/java/backupmanager/GUI/Controllers/BackupProgressController.java
new file mode 100644
index 0000000..7056239
--- /dev/null
+++ b/src/main/java/backupmanager/GUI/Controllers/BackupProgressController.java
@@ -0,0 +1,22 @@
+package backupmanager.GUI.Controllers;
+
+import javax.swing.JOptionPane;
+
+import backupmanager.Enums.TranslationLoaderEnum.TranslationCategory;
+import backupmanager.Enums.TranslationLoaderEnum.TranslationKey;
+import backupmanager.Services.ZippingThread;
+
+public class BackupProgressController {
+
+ public void handleCancelButtonRequest(javax.swing.JDialog dialog) {
+ int response = JOptionPane.showConfirmDialog(dialog, TranslationCategory.DIALOGS.getTranslation(TranslationKey.INTERRUPT_BACKUP_PROCESS_MESSAGE), TranslationCategory.DIALOGS.getTranslation(TranslationKey.CONFIRMATION_REQUIRED_TITLE), JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
+ if (response == JOptionPane.YES_OPTION) {
+ cancelBackup();
+ dialog.dispose();
+ }
+ }
+
+ private void cancelBackup() {
+ ZippingThread.stopExecutorService(1);
+ }
+}
diff --git a/src/main/java/backupmanager/Helpers/BackupHelper.java b/src/main/java/backupmanager/Helpers/BackupHelper.java
index 9a61b44..3e5280e 100644
--- a/src/main/java/backupmanager/Helpers/BackupHelper.java
+++ b/src/main/java/backupmanager/Helpers/BackupHelper.java
@@ -30,19 +30,19 @@ public class BackupHelper {
public static final DateTimeFormatter dateForfolderNameFormatter = DateTimeFormatter.ofPattern("dd-MM-yyyy'T'HH-mm-ss");
public static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss");
- public static void openBackupById(int id, BackupManagerGUI main) {
+ public static void openBackupById(int id, java.awt.Frame frame) {
logger.info("Event --> opening backup");
ConfigurationBackup backup = BackupConfigurationRepository.getBackupById(id);
- BackupEntryDialog dialog = new BackupEntryDialog(main, false, backup);
+ BackupEntryDialog dialog = new BackupEntryDialog(frame, false, backup);
dialog.setVisible(true);
}
- public static void newBackup(BackupProgressGUI progressBar, BackupManagerGUI main) {
+ public static void newBackup(BackupProgressGUI progressBar, java.awt.Frame frame) {
logger.info("Event --> new backup");
- BackupEntryDialog dialog = new BackupEntryDialog(main, false);
+ BackupEntryDialog dialog = new BackupEntryDialog(frame, false);
dialog.setVisible(true);
}
@@ -104,17 +104,17 @@ public static void showMessageActivationAutoBackup(TimeInterval timeInterval, St
"AutoBackup", 1);
}
- public static void openBackupByName(String backupName, BackupManagerGUI main) {
+ public static void openBackupByName(String backupName, java.awt.Frame frame) {
logger.info("Event --> opening backup");
ConfigurationBackup backup = BackupConfigurationRepository.getBackupByName(backupName);
- BackupEntryDialog dialog = new BackupEntryDialog(main, false, backup);
+ BackupEntryDialog dialog = new BackupEntryDialog(frame, false, backup);
dialog.setVisible(true);
}
- public static void openBackupEntryDialog(BackupManagerGUI main) {
- BackupEntryDialog dialog = new BackupEntryDialog(main, false);
+ public static void openBackupEntryDialog(java.awt.Frame frame) {
+ BackupEntryDialog dialog = new BackupEntryDialog(frame, false);
dialog.setVisible(true);
}
diff --git a/src/main/java/backupmanager/Services/BackupService.java b/src/main/java/backupmanager/Services/BackupService.java
new file mode 100644
index 0000000..4a446ca
--- /dev/null
+++ b/src/main/java/backupmanager/Services/BackupService.java
@@ -0,0 +1,62 @@
+package backupmanager.Services;
+
+import java.util.List;
+
+import backupmanager.Entities.ConfigurationBackup;
+import backupmanager.Enums.TranslationLoaderEnum.TranslationCategory;
+import backupmanager.Enums.TranslationLoaderEnum.TranslationKey;
+import static backupmanager.Helpers.BackupHelper.formatter;
+import backupmanager.database.Repositories.BackupConfigurationRepository;
+
+public class BackupService {
+ public List getAllBackups() {
+ return BackupConfigurationRepository.getBackupList();
+ }
+
+ public boolean isRunning(String name) {
+ return RunningBackupService.getRunningBackupByName(name).isPresent();
+ }
+
+ public void deleteBackups(List names) {
+ names.forEach(name -> {
+ ConfigurationBackup backup = BackupConfigurationRepository.getBackupByName(name);
+ if (backup != null) {
+ BackupConfigurationRepository.deleteBackup(backup.getId());
+ }
+ });
+ }
+
+ public String getBackupDetails(String name) {
+ ConfigurationBackup backup = BackupConfigurationRepository.getBackupByName(name);
+ return buildDetails(backup);
+ }
+
+ private String buildDetails(ConfigurationBackup backup) {
+ String backupNameStr = TranslationCategory.BACKUP_LIST.getTranslation(TranslationKey.BACKUP_NAME_DETAIL);
+ String initialPathStr = TranslationCategory.BACKUP_LIST.getTranslation(TranslationKey.INITIAL_PATH_DETAIL);
+ String destinationPathStr = TranslationCategory.BACKUP_LIST.getTranslation(TranslationKey.DESTINATION_PATH_DETAIL);
+ String lastBackupStr = TranslationCategory.BACKUP_LIST.getTranslation(TranslationKey.LAST_BACKUP_DETAIL);
+ String nextBackupStr = TranslationCategory.BACKUP_LIST.getTranslation(TranslationKey.NEXT_BACKUP_DATE_DETAIL);
+ String timeIntervalBackupStr = TranslationCategory.BACKUP_LIST.getTranslation(TranslationKey.TIME_INTERVAL_DETAIL);
+ String creationDateStr = TranslationCategory.BACKUP_LIST.getTranslation(TranslationKey.CREATION_DATE_DETAIL);
+ String lastUpdateDateStr = TranslationCategory.BACKUP_LIST.getTranslation(TranslationKey.LAST_UPDATE_DATE_DETAIL);
+ String backupCountStr = TranslationCategory.BACKUP_LIST.getTranslation(TranslationKey.BACKUP_COUNT_DETAIL);
+ String notesStr = TranslationCategory.BACKUP_LIST.getTranslation(TranslationKey.NOTES_DETAIL);
+ String maxBackupsToKeepStr = TranslationCategory.BACKUP_LIST.getTranslation(TranslationKey.MAX_BACKUPS_TO_KEEP_DETAIL);
+
+ return (
+ "" + backupNameStr + ": " + backup.getName() + ", " +
+ "" + initialPathStr + ": " + backup.getTargetPath() + ", " +
+ "" + destinationPathStr + ": " + backup.getDestinationPath() + ", " +
+ "" + lastBackupStr + ": " + (backup.getLastBackupDate() != null ? backup.getLastBackupDate().format(formatter) : "") + ", " +
+ "" + nextBackupStr + ": " + (backup.getNextBackupDate() != null ? backup.getNextBackupDate().format(formatter) : "_") + ", " +
+ "" + timeIntervalBackupStr + ": " + (backup.getTimeIntervalBackup() != null ? backup.getTimeIntervalBackup().toString() : "_") + ", " +
+ "" + creationDateStr + ": " + (backup.getCreationDate() != null ? backup.getCreationDate().format(formatter) : "_") + ", " +
+ "" + lastUpdateDateStr + ": " + (backup.getLastUpdateDate() != null ? backup.getLastUpdateDate().format(formatter) : "_") + ", " +
+ "" + backupCountStr + ": " + (backup.getCount()) + ", " +
+ "" + maxBackupsToKeepStr + ": " + (backup.getMaxToKeep()) + ", " +
+ "" + notesStr + ": " + (backup.getNotes()) +
+ ""
+ );
+ }
+}