From 7739546714a180ed7a815f772624cd5145fa47e3 Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Sun, 17 Apr 2022 22:07:17 +0200
Subject: [PATCH] #663 - added basic status page

---
 .../migration/MigrationController.java        | 16 ++++++
 .../resources/languages/base_de.properties    |  3 ++
 .../resources/languages/base_en.properties    |  4 ++
 .../src/main/resources/static/js/migration.js | 24 +++++++++
 .../resources/templates/migration/status.ftl  | 50 +++++++++++++++++++
 .../templates/migration/statusFragment.ftl    | 15 ++++++
 6 files changed, 112 insertions(+)
 create mode 100644 BudgetMasterServer/src/main/resources/static/js/migration.js
 create mode 100644 BudgetMasterServer/src/main/resources/templates/migration/status.ftl
 create mode 100644 BudgetMasterServer/src/main/resources/templates/migration/statusFragment.ftl

diff --git a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/migration/MigrationController.java b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/migration/MigrationController.java
index 6887159e4..ca6c3b86b 100644
--- a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/migration/MigrationController.java
+++ b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/migration/MigrationController.java
@@ -30,11 +30,14 @@ public class MigrationController extends BaseController
 	{
 		public static final String ERROR = "error";
 		public static final String MIGRATION_SETTINGS = "migrationSettings";
+		public static final String STATUS_TEXT_KEY = "statusTextKey";
 	}
 
 	private static class ReturnValues
 	{
 		public static final String MIGRATION_SETTINGS = "migration/migration";
+		public static final String STATUS = "migration/status";
+		public static final String STATUS_FRAGMENT = "migration/statusFragment";
 	}
 
 	private final MigrationService migrationService;
@@ -106,4 +109,17 @@ public class MigrationController extends BaseController
 		// TODO: redirect to success page
 		return ReturnValues.MIGRATION_SETTINGS;
 	}
+
+	@GetMapping("/status")
+	public String status()
+	{
+		return ReturnValues.STATUS;
+	}
+
+	@GetMapping("/getStatus")
+	public String getMigrationStatus(Model model)
+	{
+		model.addAttribute(ModelAttributes.STATUS_TEXT_KEY, "migration.status.running");
+		return ReturnValues.STATUS_FRAGMENT;
+	}
 }
\ No newline at end of file
diff --git a/BudgetMasterServer/src/main/resources/languages/base_de.properties b/BudgetMasterServer/src/main/resources/languages/base_de.properties
index b8de58e06..deac41168 100644
--- a/BudgetMasterServer/src/main/resources/languages/base_de.properties
+++ b/BudgetMasterServer/src/main/resources/languages/base_de.properties
@@ -649,3 +649,6 @@ migration.settings.password=Passwort
 migration.settings.verification.password.description=Bitte gib dein aktuelles BudgetMaster Passwort ein, um den Migrationsprozess zu bestätigen.<br><span class="red-text bold">Die Migration kann nicht abgebrochen werden.</span><br>Deine bestehende BudgetMaster Datenbank wird weder geändert noch gelöscht.
 migration.settings.verification.password=Aktuelles BudgetMaster Passwort
 migration.settings.verification.password.wrong=Ungültiges Bestätigungspasswort
+migration.status.running=Migration läuft...
+migration.status.finished=Migration fertiggestellt!
+migration.status.error=Migration fehlgeschlagen!
diff --git a/BudgetMasterServer/src/main/resources/languages/base_en.properties b/BudgetMasterServer/src/main/resources/languages/base_en.properties
index ff69f2097..8166a4ba4 100644
--- a/BudgetMasterServer/src/main/resources/languages/base_en.properties
+++ b/BudgetMasterServer/src/main/resources/languages/base_en.properties
@@ -648,3 +648,7 @@ migration.settings.password=Password
 migration.settings.verification.password.description=Please enter your current BudgetMaster password to confirm the migration process.<br><span class="red-text bold">The migration can not be canceled.</span><br>Your existing BudgetMaster database will neither be modified nor deleted.
 migration.settings.verification.password=Current BudgetMaster password
 migration.settings.verification.password.wrong=Invalid verification password
+migration.status.running=Migration is running...
+migration.status.finished=Migration finished!
+migration.status.error=Migration failed!
+
diff --git a/BudgetMasterServer/src/main/resources/static/js/migration.js b/BudgetMasterServer/src/main/resources/static/js/migration.js
new file mode 100644
index 000000000..fc1b6d02b
--- /dev/null
+++ b/BudgetMasterServer/src/main/resources/static/js/migration.js
@@ -0,0 +1,24 @@
+$(document).ready(function()
+{
+    getMigrationStatus();
+});
+
+function getMigrationStatus()
+{
+    console.log("ja")
+
+    $.ajax({
+        type: 'GET',
+        url: $('#migration-status').attr('data-url'),
+        data: {},
+        success: function(data)
+        {
+            $('#migration-status').html(data);
+        },
+        complete: function()
+        {
+            // schedule the next request when the current one is complete
+            setTimeout(getMigrationStatus, 3000);
+        }
+    });
+}
\ No newline at end of file
diff --git a/BudgetMasterServer/src/main/resources/templates/migration/status.ftl b/BudgetMasterServer/src/main/resources/templates/migration/status.ftl
new file mode 100644
index 000000000..5943e03b2
--- /dev/null
+++ b/BudgetMasterServer/src/main/resources/templates/migration/status.ftl
@@ -0,0 +1,50 @@
+<html>
+    <head>
+        <#import "../helpers/header.ftl" as header>
+        <@header.globals/>
+        <@header.header "BudgetMaster - ${locale.getString('title.migration')}"/>
+        <#import "/spring.ftl" as s>
+    </head>
+    <@header.body>
+        <#import "../helpers/navbar.ftl" as navbar>
+        <@navbar.navbar "migration" settings/>
+        <#import "../helpers/validation.ftl" as validation>
+
+        <main>
+            <div class="card main-card background-color">
+                <div class="container">
+                    <div class="section center-align">
+                        <div class="headline">${locale.getString("title.migration")}</div>
+                    </div>
+                </div>
+
+                <div class="container center-align">
+                    <div class="row">
+                        <div class="col s12 m12 l8 offset-l2">
+                            <div class="preloader-wrapper small active">
+                                <div class="spinner-layer spinner-blue-only">
+                                    <div class="circle-clipper left">
+                                        <div class="circle"></div>
+                                    </div>
+                                    <div class="gap-patch">
+                                        <div class="circle"></div>
+                                    </div>
+                                    <div class="circle-clipper right">
+                                        <div class="circle"></div>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+
+                    <div id="migration-status" data-url="<@s.url '/migration/getStatus'/>"></div>
+                </div>
+            </div>
+        </main>
+
+        <!-- Scripts-->
+        <#import "../helpers/scripts.ftl" as scripts>
+        <@scripts.scripts/>
+        <script src="<@s.url '/js/migration.js'/>"></script>
+    </@header.body>
+</html>
\ No newline at end of file
diff --git a/BudgetMasterServer/src/main/resources/templates/migration/statusFragment.ftl b/BudgetMasterServer/src/main/resources/templates/migration/statusFragment.ftl
new file mode 100644
index 000000000..80073e5b8
--- /dev/null
+++ b/BudgetMasterServer/src/main/resources/templates/migration/statusFragment.ftl
@@ -0,0 +1,15 @@
+<#global locale = static["de.thecodelabs.utils.util.Localization"]>
+<#import "/spring.ftl" as s>
+<#import "../helpers/header.ftl" as header>
+
+<div class="row">
+    <div class="col s12 m12 l8 offset-l2">
+        <div class="headline-small">${locale.getString(statusTextKey)}</div>
+    </div>
+</div>
+
+<div class="row">
+    <div class="col s12 m12 l8 offset-l2">
+        Status:
+    </div>
+</div>
\ No newline at end of file
-- 
GitLab