From 8b7bbfbe6b228fd890e453d63a484c535f0d7a95 Mon Sep 17 00:00:00 2001 From: tobias <tobias@thecodedev.de> Date: Sun, 29 Mar 2020 14:50:27 +0200 Subject: [PATCH] #455 - Show next execution time --- .../budgetmaster/services/BackupService.java | 20 ++++++++++++++++--- .../services/DateFormatStyle.java | 3 ++- .../budgetmaster/services/DateService.java | 5 +++++ .../settings/SettingsController.java | 4 ++++ src/main/resources/languages/_de.properties | 1 + src/main/resources/languages/_en.properties | 3 ++- .../resources/templates/settings/settings.ftl | 4 ++++ 7 files changed, 35 insertions(+), 5 deletions(-) diff --git a/src/main/java/de/deadlocker8/budgetmaster/services/BackupService.java b/src/main/java/de/deadlocker8/budgetmaster/services/BackupService.java index 2e674ff73..1115e2a18 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/services/BackupService.java +++ b/src/main/java/de/deadlocker8/budgetmaster/services/BackupService.java @@ -3,16 +3,16 @@ package de.deadlocker8.budgetmaster.services; import de.deadlocker8.budgetmaster.settings.AutoBackupTime; import de.deadlocker8.budgetmaster.settings.Settings; import de.deadlocker8.budgetmaster.settings.SettingsService; +import org.joda.time.DateTime; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.event.ContextRefreshedEvent; import org.springframework.context.event.EventListener; import org.springframework.scheduling.TaskScheduler; +import org.springframework.scheduling.support.CronSequenceGenerator; import org.springframework.scheduling.support.CronTrigger; import org.springframework.stereotype.Service; -import java.util.HashMap; -import java.util.Map; -import java.util.TimeZone; +import java.util.*; import java.util.concurrent.ScheduledFuture; @Service @@ -66,4 +66,18 @@ public class BackupService int hour = time.getCronTime(); return String.format("0 0 %d */%d * *", hour, days); } + + public Optional<DateTime> getNextRun() + { + final Settings settings = settingsService.getSettings(); + if(settings.getAutoBackupActivated()) + { + final String cron = computeCron(settings.getAutoBackupTime(), settings.getAutoBackupDays()); + CronSequenceGenerator cronTrigger = new CronSequenceGenerator(cron); + Date next = cronTrigger.next(new Date()); + + return Optional.of(new DateTime(next)); + } + return Optional.empty(); + } } \ No newline at end of file diff --git a/src/main/java/de/deadlocker8/budgetmaster/services/DateFormatStyle.java b/src/main/java/de/deadlocker8/budgetmaster/services/DateFormatStyle.java index 1ff6cad49..3a3ace9da 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/services/DateFormatStyle.java +++ b/src/main/java/de/deadlocker8/budgetmaster/services/DateFormatStyle.java @@ -5,7 +5,8 @@ public enum DateFormatStyle NORMAL("dd.MM.yy"), NO_YEAR("dd.MM."), LONG("dd.MM.yyyy"), - LONG_MONTH_AND_YEAR("MMMM yyyy"); + LONG_MONTH_AND_YEAR("MMMM yyyy"), + DATE_TIME("dd.MM.yyyy HH:mm"); private String key; diff --git a/src/main/java/de/deadlocker8/budgetmaster/services/DateService.java b/src/main/java/de/deadlocker8/budgetmaster/services/DateService.java index 9ba110f3b..605c8ac7e 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/services/DateService.java +++ b/src/main/java/de/deadlocker8/budgetmaster/services/DateService.java @@ -37,6 +37,11 @@ public class DateService return getDateString(date, DateFormatStyle.LONG_MONTH_AND_YEAR); } + public String getDateTimeString(DateTime date) + { + return getDateString(date, DateFormatStyle.DATE_TIME); + } + private String getDateString(DateTime date, DateFormatStyle formatStyle) { return date.toString(DateTimeFormat.forPattern(formatStyle.getKey()).withLocale(settingsService.getSettings().getLanguage().getLocale())); diff --git a/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsController.java b/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsController.java index bcf75d1fa..5f9781829 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsController.java +++ b/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsController.java @@ -19,6 +19,7 @@ import de.deadlocker8.budgetmaster.utils.Strings; import de.thecodelabs.utils.util.Localization; import de.thecodelabs.utils.util.RandomUtils; import de.thecodelabs.versionizer.UpdateItem; +import org.joda.time.DateTime; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -77,6 +78,9 @@ public class SettingsController extends BaseController model.addAttribute("searchResultsPerPageOptions", SEARCH_RESULTS_PER_PAGE_OPTIONS); model.addAttribute("autoBackupTimes", AutoBackupTime.values()); + final Optional<DateTime> nextBackupTimeOptional = scheduleTaskService.getNextRun(); + nextBackupTimeOptional.ifPresent(date -> model.addAttribute("nextBackupTime", date)); + request.removeAttribute("database", WebRequest.SCOPE_SESSION); return "settings/settings"; } diff --git a/src/main/resources/languages/_de.properties b/src/main/resources/languages/_de.properties index 5c6db1ce6..3528c9858 100644 --- a/src/main/resources/languages/_de.properties +++ b/src/main/resources/languages/_de.properties @@ -188,6 +188,7 @@ settings.backup.auto.days=Intervall in Tagen settings.backup.auto.time=Uhrzeit settings.backup.auto.time.short={0} Uhr settings.backup.auto.files.to.keep=Anzahl aufzubewahrender Backups (0 für unbegrenzt) +settings.backup.auto.next=Nächste Ausführung settings.database.import=Importieren settings.database.export=Exportieren diff --git a/src/main/resources/languages/_en.properties b/src/main/resources/languages/_en.properties index d09dd8cb0..09bf3b112 100644 --- a/src/main/resources/languages/_en.properties +++ b/src/main/resources/languages/_en.properties @@ -186,8 +186,9 @@ settings.backup.auto.deactivated=Off settings.backup.auto.activated=On settings.backup.auto.days=Interval in days settings.backup.auto.time=Time of day -settings.backup.auto.time.short={0} o'clock +settings.backup.auto.time.short={0} o''clock settings.backup.auto.files.to.keep=Number of backups to keep (0 for unlimited) +settings.backup.auto.next=Next execution 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 edcdc44bb..434bda646 100644 --- a/src/main/resources/templates/settings/settings.ftl +++ b/src/main/resources/templates/settings/settings.ftl @@ -137,6 +137,10 @@ <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.getAutoBackupActivated()??>${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> <br> -- GitLab