From 5f27c4b77cffee4eac8f8f21746f3127041d5c35 Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Mon, 21 Dec 2020 17:13:21 +0100
Subject: [PATCH] #562 - added input for server address + adapt validation +
 refactor auto backup html to macro

---
 .../budgetmaster/settings/Settings.java       | 23 ++++--
 .../settings/SettingsService.java             |  4 +
 .../settings/SettingsValidator.java           |  1 +
 .../budgetmaster/utils/Strings.java           |  1 +
 .../resources/languages/base_de.properties    |  4 +
 .../resources/languages/base_en.properties    |  6 +-
 .../resources/templates/settings/settings.ftl | 53 +-------------
 .../templates/settings/settingsMacros.ftl     | 73 +++++++++++++++++++
 8 files changed, 107 insertions(+), 58 deletions(-)

diff --git a/src/main/java/de/deadlocker8/budgetmaster/settings/Settings.java b/src/main/java/de/deadlocker8/budgetmaster/settings/Settings.java
index 643933803..a1ee861e6 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/settings/Settings.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/settings/Settings.java
@@ -31,6 +31,7 @@ public class Settings
 	private AutoBackupTime autoBackupTime;
 
 	private Integer autoBackupFilesToKeep;
+	private String autoBackupGitUrl;
 	private String autoBackupGitUserName;
 	private String autoBackupGitPassword;
 
@@ -57,8 +58,9 @@ public class Settings
 		defaultSettings.setAutoBackupDays(1);
 		defaultSettings.setAutoBackupTime(AutoBackupTime.TIME_00);
 		defaultSettings.setAutoBackupFilesToKeep(3);
-		defaultSettings.setAutoBackupGitUserName(null);
-		defaultSettings.setAutoBackupGitPassword(null);
+		defaultSettings.setAutoBackupGitUrl("");
+		defaultSettings.setAutoBackupGitUserName("");
+		defaultSettings.setAutoBackupGitPassword("");
 		defaultSettings.setInstalledVersionCode(0);
 		defaultSettings.setWhatsNewShownForCurrentVersion(false);
 		defaultSettings.setShowFirstUseBanner(true);
@@ -205,6 +207,16 @@ public class Settings
 		this.autoBackupFilesToKeep = autoBackupFilesToKeep;
 	}
 
+	public String getAutoBackupGitUrl()
+	{
+		return autoBackupGitUrl;
+	}
+
+	public void setAutoBackupGitUrl(String autoBackupGitUrl)
+	{
+		this.autoBackupGitUrl = autoBackupGitUrl;
+	}
+
 	public String getAutoBackupGitUserName()
 	{
 		return autoBackupGitUserName;
@@ -273,12 +285,13 @@ public class Settings
 				", backupReminderActivated=" + backupReminderActivated +
 				", lastBackupReminderDate=" + lastBackupReminderDate +
 				", searchItemsPerPage=" + searchItemsPerPage +
+				", autoBackupStrategy=" + autoBackupStrategy +
 				", autoBackupDays=" + autoBackupDays +
 				", autoBackupTime=" + autoBackupTime +
-				", backupStrategy=" + autoBackupStrategy +
 				", autoBackupFilesToKeep=" + autoBackupFilesToKeep +
-				", gitUserName='" + autoBackupGitUserName + '\'' +
-				", gitPassword='" + autoBackupGitPassword + '\'' +
+				", autoBackupGitUrl='" + autoBackupGitUrl + '\'' +
+				", autoBackupGitUserName='" + autoBackupGitUserName + '\'' +
+				", autoBackupGitPassword='" + autoBackupGitPassword + '\'' +
 				", installedVersionCode=" + installedVersionCode +
 				", whatsNewShownForCurrentVersion=" + whatsNewShownForCurrentVersion +
 				", showFirstUseBanner=" + showFirstUseBanner +
diff --git a/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsService.java b/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsService.java
index 82c70a4ce..10f5c745f 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsService.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsService.java
@@ -77,6 +77,10 @@ public class SettingsService
 		{
 			settings.setAutoBackupFilesToKeep(defaultSettings.getAutoBackupFilesToKeep());
 		}
+		if(settings.getAutoBackupGitUrl() == null)
+		{
+			settings.setAutoBackupGitUrl(defaultSettings.getAutoBackupGitUrl());
+		}
 		if(settings.getAutoBackupGitUserName() == null)
 		{
 			settings.setAutoBackupGitUserName(defaultSettings.getAutoBackupGitUserName());
diff --git a/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsValidator.java b/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsValidator.java
index e8588c343..74c3070bf 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsValidator.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsValidator.java
@@ -27,6 +27,7 @@ public class SettingsValidator implements Validator
 
 		if(settings.getAutoBackupStrategy() == AutoBackupStrategy.GIT_REMOTE)
 		{
+			ValidationUtils.rejectIfEmptyOrWhitespace(errors, "autoBackupGitUrl", Strings.WARNING_EMPTY_GIT_URL);
 			ValidationUtils.rejectIfEmptyOrWhitespace(errors, "autoBackupGitUserName", Strings.WARNING_EMPTY_GIT_USER_NAME);
 			ValidationUtils.rejectIfEmptyOrWhitespace(errors, "autoBackupGitPassword", Strings.WARNING_EMPTY_GIT_PASSWORD);
 		}
diff --git a/src/main/java/de/deadlocker8/budgetmaster/utils/Strings.java b/src/main/java/de/deadlocker8/budgetmaster/utils/Strings.java
index bfbd8ab6a..a812f55b4 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/utils/Strings.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/utils/Strings.java
@@ -29,6 +29,7 @@ public class Strings
 	public static final String WARNING_EMPTY_NUMBER = "warning.empty.number";
 	public static final String WARNING_EMPTY_NUMBER_ZERO_ALLOWED = "warning.empty.number.zero.allowed";
 	public static final String WARNING_DUPLICATE_TEMPLATE_NAME = "warning.duplicate.template.name";
+	public static final String WARNING_EMPTY_GIT_URL = "warning.empty.git.url";
 	public static final String WARNING_EMPTY_GIT_USER_NAME = "warning.empty.git.user.name";
 	public static final String WARNING_EMPTY_GIT_PASSWORD = "warning.empty.git.password";
 
diff --git a/src/main/resources/languages/base_de.properties b/src/main/resources/languages/base_de.properties
index 2312ce233..8d0c447b6 100644
--- a/src/main/resources/languages/base_de.properties
+++ b/src/main/resources/languages/base_de.properties
@@ -144,6 +144,7 @@ warning.empty.chart.name=Bitte gib einen Namen ein.
 warning.empty.chart.script=Bitte gib ein Script ein.
 warning.duplicate.template.name=Es existiert bereits eine Vorlage mit diesem Namen.
 warning.transaction.date=Das angegebene Datum entspricht nicht dem erlaubten Format. Erwartetes Format: DD.MM.YY, DDMMYY, DD.MM.YYYY, DDMMYYYY.
+warning.empty.git.user.url=Bitte gib die URL zum git-Server ein.
 warning.empty.git.user.name=Bitte gib deinen git-Nutzernamen ein.
 warning.empty.git.password=Bitte gib dein git-Passwort ein.
 
@@ -207,6 +208,9 @@ settings.backup.auto.strategy.git.local=Lokales git repository
 settings.backup.auto.strategy.git.remote=Entferntes git repository
 settings.backup.auto.files.to.keep=Anzahl aufzubewahrender Backups (0 für unbegrenzt)
 settings.backup.auto.next=Nächste Ausführung
+settings.backup.auto.git.url=Adresse des Git-Servers
+settings.backup.auto.git.user.name=Git Nutzername
+settings.backup.auto.git.password=Git Passwort
 
 settings.database.import=Importieren
 settings.database.export=Exportieren
diff --git a/src/main/resources/languages/base_en.properties b/src/main/resources/languages/base_en.properties
index 0563900e0..95d69f583 100644
--- a/src/main/resources/languages/base_en.properties
+++ b/src/main/resources/languages/base_en.properties
@@ -144,8 +144,9 @@ warning.empty.chart.name=Please insert a name.
 warning.empty.chart.script=Please insert a script.
 warning.duplicate.template.name=A template with this name is already existing.
 warning.transaction.date=The specified date does not correspond to the allowed format. Expected format: DD.MM.YY, DDMMYY, DD.MM.YYYY, DDMMYYYY.
+warning.empty.git.user.url=Please insert the git server's URL.
 warning.empty.git.user.name=Please insert your git user name.
-warning.empty.git.password=Please insert yout git password.
+warning.empty.git.password=Please insert your git password.
 
 
 # UI
@@ -207,6 +208,9 @@ settings.backup.auto.strategy.git.local=Local git repository
 settings.backup.auto.strategy.git.remote=Remote git repository
 settings.backup.auto.files.to.keep=Number of backups to keep (0 for unlimited)
 settings.backup.auto.next=Next execution
+settings.backup.auto.git.url=Git server address
+settings.backup.auto.git.user.name=Git user name
+settings.backup.auto.git.password=Git password
 
 settings.database.import=Import
 settings.database.export=Export
diff --git a/src/main/resources/templates/settings/settings.ftl b/src/main/resources/templates/settings/settings.ftl
index ec03c7909..689bd7aff 100644
--- a/src/main/resources/templates/settings/settings.ftl
+++ b/src/main/resources/templates/settings/settings.ftl
@@ -116,58 +116,7 @@
                             </div>
                         </div>
 
-                        <div class="row" id="settings-auto-backup">
-                            <div class="input-field col s12 m12 l8 offset-l2">
-                                <i class="material-icons prefix">event</i>
-                                <input id="settings-backup-auto-days" type="text" <@validation.validation "autoBackupDays"/> value="<#if settings.isAutoBackupActive()??>${settings.getAutoBackupDays()}</#if>">
-                                <label for="settings-backup-auto-days">${locale.getString("settings.backup.auto.days")}</label>
-                            </div>
-                            <input type="hidden" id="hidden-settings-backup-auto-days" name="autoBackupDays" value="<#if settings.isAutoBackupActive()??>${settings.getAutoBackupDays()}</#if>">
-
-                            <script>
-                                numberValidationMessage = "${locale.getString("warning.empty.number")}";
-                                numberValidationMessageZeroAllowed = "${locale.getString("warning.empty.number.zero.allowed")}";
-                            </script>
-
-                            <div class="input-field col s12 m12 l8 offset-l2">
-                                <i class="material-icons prefix">schedule</i>
-                                <select id="settings-backup-auto-time" name="autoBackupTime" <@validation.validation "autoBackupTime"/>>
-                                    <#list autoBackupTimes as time>
-                                        <#if settings.getAutoBackupTime() == time>
-                                            <option selected value="${time}">${time.getLocalized()}</option>
-                                        <#else>
-                                            <option value="${time}">${time.getLocalized()}</option>
-                                        </#if>
-                                    </#list>
-                                </select>
-                                <label for="settings-backup-auto-time">${locale.getString("settings.backup.auto.time")}</label>
-                            </div>
-
-                            <div class="input-field col s12 m12 l8 offset-l2">
-                                <i class="material-icons prefix">source</i>
-                                <select id="settings-backup-auto-strategy" name="autoBackupStrategyType">
-                                    <#list helpers.getAvailableAutoBackupStrategies() as strategy>
-                                        <#if settings.getAutoBackupStrategy() == strategy>
-                                            <option selected value="${strategy.getName()}">${strategy.getName()}</option>
-                                        <#else>
-                                            <option value="${strategy.getName()}">${strategy.getName()}</option>
-                                        </#if>
-                                    </#list>
-                                </select>
-                                <label for="settings-language">${locale.getString("settings.backup.auto.strategy")}</label>
-                            </div>
-
-                            <div class="input-field col s12 m12 l8 offset-l2">
-                                <i class="material-icons prefix">auto_delete</i>
-                                <input id="settings-backup-auto-files-to-keep" type="text" <@validation.validation "autoBackupFilesToKeep"/> value="<#if settings.isAutoBackupActive()??>${settings.getAutoBackupFilesToKeep()}</#if>">
-                                <label for="settings-backup-auto-files-to-keep">${locale.getString("settings.backup.auto.files.to.keep")}</label>
-                            </div>
-                            <input type="hidden" id="hidden-settings-backup-auto-files-to-keep" name="autoBackupFilesToKeep" value="<#if settings.isAutoBackupActive()??>${settings.getAutoBackupFilesToKeep()}</#if>">
-
-                            <div class="col s12 m12 l8 offset-l2">
-                                ${locale.getString("settings.backup.auto.next")}: <#if nextBackupTime??>${dateService.getDateTimeString(nextBackupTime)}<#else>-</#if>
-                            </div>
-                        </div>
+                        <@settingsMacros.autoBackup/>
 
                         <br>
 
diff --git a/src/main/resources/templates/settings/settingsMacros.ftl b/src/main/resources/templates/settings/settingsMacros.ftl
index b965e0e62..b12710956 100644
--- a/src/main/resources/templates/settings/settingsMacros.ftl
+++ b/src/main/resources/templates/settings/settingsMacros.ftl
@@ -155,4 +155,77 @@
             <a href="<@s.url '/settings/performUpdate'/>" class="modal-action modal-close waves-effect waves-light green btn-flat white-text">${locale.getString("settings.update.start")}</a>
         </div>
     </div>
+</#macro>
+
+<#macro autoBackup>
+    <div class="row" id="settings-auto-backup">
+        <div class="input-field col s12 m12 l8 offset-l2">
+            <i class="material-icons prefix">event</i>
+            <input id="settings-backup-auto-days" type="text" <@validation.validation "autoBackupDays"/> value="<#if settings.isAutoBackupActive()??>${settings.getAutoBackupDays()}</#if>">
+            <label for="settings-backup-auto-days">${locale.getString("settings.backup.auto.days")}</label>
+        </div>
+        <input type="hidden" id="hidden-settings-backup-auto-days" name="autoBackupDays" value="<#if settings.isAutoBackupActive()??>${settings.getAutoBackupDays()}</#if>">
+
+        <script>
+            numberValidationMessage = "${locale.getString("warning.empty.number")}";
+            numberValidationMessageZeroAllowed = "${locale.getString("warning.empty.number.zero.allowed")}";
+        </script>
+
+        <div class="input-field col s12 m12 l8 offset-l2">
+            <i class="material-icons prefix">schedule</i>
+            <select id="settings-backup-auto-time" name="autoBackupTime" <@validation.validation "autoBackupTime"/>>
+                <#list autoBackupTimes as time>
+                    <#if settings.getAutoBackupTime() == time>
+                        <option selected value="${time}">${time.getLocalized()}</option>
+                    <#else>
+                        <option value="${time}">${time.getLocalized()}</option>
+                    </#if>
+                </#list>
+            </select>
+            <label for="settings-backup-auto-time">${locale.getString("settings.backup.auto.time")}</label>
+        </div>
+
+        <div class="input-field col s12 m12 l8 offset-l2">
+            <i class="material-icons prefix">source</i>
+            <select id="settings-backup-auto-strategy" name="autoBackupStrategyType">
+                <#list helpers.getAvailableAutoBackupStrategies() as strategy>
+                    <#if settings.getAutoBackupStrategy() == strategy>
+                        <option selected value="${strategy.getName()}">${strategy.getName()}</option>
+                    <#else>
+                        <option value="${strategy.getName()}">${strategy.getName()}</option>
+                    </#if>
+                </#list>
+            </select>
+            <label for="settings-language">${locale.getString("settings.backup.auto.strategy")}</label>
+        </div>
+
+        <div class="input-field col s12 m12 l8 offset-l2">
+            <i class="material-icons prefix">auto_delete</i>
+            <input id="settings-backup-auto-files-to-keep" type="text" <@validation.validation "autoBackupFilesToKeep"/> value="<#if settings.isAutoBackupActive()??>${settings.getAutoBackupFilesToKeep()}</#if>">
+            <label for="settings-backup-auto-files-to-keep">${locale.getString("settings.backup.auto.files.to.keep")}</label>
+        </div>
+        <input type="hidden" id="hidden-settings-backup-auto-files-to-keep" name="autoBackupFilesToKeep" value="<#if settings.isAutoBackupActive()??>${settings.getAutoBackupFilesToKeep()}</#if>">
+
+        <div class="input-field col s12 m12 l8 offset-l2">
+            <i class="material-icons prefix">language</i>
+            <input id="settings-backup-auto-git-url" name="autoBackupGitUrl" type="text" <@validation.validation "autoBackupGitUrl"/> value="<#if settings.isAutoBackupActive()??>${settings.getAutoBackupGitUrl()}</#if>">
+            <label for="settings-backup-auto-git-url">${locale.getString("settings.backup.auto.git.url")}</label>
+        </div>
+
+        <div class="input-field col s12 m12 l8 offset-l2">
+            <i class="material-icons prefix">person</i>
+            <input id="settings-backup-auto-git-user-name" name="autoBackupGitUserName" type="text" <@validation.validation "autoBackupGitUserName"/> value="<#if settings.isAutoBackupActive()??>${settings.getAutoBackupGitUserName()}</#if>">
+            <label for="settings-backup-auto-git-user-name">${locale.getString("settings.backup.auto.git.user.name")}</label>
+        </div>
+
+        <div class="input-field col s12 m12 l8 offset-l2">
+            <i class="material-icons prefix">vpn_key</i>
+            <input id="settings-backup-auto-git-password" name="autoBackupGitPassword" type="text" <@validation.validation "autoBackupGitPassword"/> value="<#if settings.isAutoBackupActive()??>${settings.getAutoBackupGitPassword()}</#if>">
+            <label for="settings-backup-auto-git-password">${locale.getString("settings.backup.auto.git.password")}</label>
+        </div>
+
+        <div class="col s12 m12 l8 offset-l2">
+            ${locale.getString("settings.backup.auto.next")}: <#if nextBackupTime??>${dateService.getDateTimeString(nextBackupTime)}<#else>-</#if>
+        </div>
+    </div>
 </#macro>
\ No newline at end of file
-- 
GitLab