From 458352754b15330a6d29ab8b1844e9f1278f1b6f Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Sun, 17 Apr 2022 23:56:42 +0200
Subject: [PATCH] #663 - show summary after migration

---
 .../migration/MigrationController.java        |  2 ++
 .../migration/MigrationService.java           | 27 +++++++++++++++++++
 .../budgetmaster/migration/MigrationTask.java | 20 +++++++-------
 .../templates/migration/statusFragment.ftl    |  5 +++-
 4 files changed, 43 insertions(+), 11 deletions(-)

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 63dab7369..83f3f92b5 100644
--- a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/migration/MigrationController.java
+++ b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/migration/MigrationController.java
@@ -25,6 +25,7 @@ public class MigrationController extends BaseController
 		public static final String ERROR = "error";
 		public static final String MIGRATION_SETTINGS = "migrationSettings";
 		public static final String STATUS = "status";
+		public static final String SUMMARY = "summary";
 	}
 
 	private static class ReturnValues
@@ -105,6 +106,7 @@ public class MigrationController extends BaseController
 	public String getMigrationStatus(Model model)
 	{
 		model.addAttribute(ModelAttributes.STATUS, migrationService.getMigrationStatus());
+		model.addAttribute(ModelAttributes.SUMMARY, migrationService.getSummary());
 		return ReturnValues.STATUS_FRAGMENT;
 	}
 }
\ No newline at end of file
diff --git a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/migration/MigrationService.java b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/migration/MigrationService.java
index c38fe2a68..c2be6deb1 100644
--- a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/migration/MigrationService.java
+++ b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/migration/MigrationService.java
@@ -14,13 +14,19 @@ import org.springframework.stereotype.Service;
 
 import java.nio.file.Files;
 import java.nio.file.Path;
+import java.util.ArrayList;
 import java.util.Date;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 @Service
 public class MigrationService
 {
 	public static final String PREVIOUS_DATABASE_FILE_NAME = "budgetmaster.mv.db";
 	public static final String PREVIOUS_DATABASE_FILE_NAME_WITHOUT_EXTENSION = "budgetmaster";
+	private static final Pattern PATTERN_SUMMARY = Pattern.compile(".*(\\[COMPLETED\\] Migrate .*)");
+
 	private final SettingsService settingsService;
 	private final Path applicationSupportFolder;
 	private final AccountRepository accountRepository;
@@ -117,4 +123,25 @@ public class MigrationService
 	{
 		return migrationTask.getMigrationStatus();
 	}
+
+	public List<String> getSummary()
+	{
+		final List<String> collectedStdout = migrationTask.getCollectedStdout();
+		if(collectedStdout == null)
+		{
+			return new ArrayList<>();
+		}
+
+		final List<String> summary = new ArrayList<>();
+		for(String line : collectedStdout)
+		{
+			final Matcher matcher = PATTERN_SUMMARY.matcher(line);
+			if(matcher.find())
+			{
+				summary.add(matcher.group(1));
+			}
+		}
+
+		return summary;
+	}
 }
diff --git a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/migration/MigrationTask.java b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/migration/MigrationTask.java
index c7a4de6a9..8f6ca06e8 100644
--- a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/migration/MigrationTask.java
+++ b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/migration/MigrationTask.java
@@ -10,10 +10,7 @@ import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.StandardCopyOption;
 import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
-import java.util.Optional;
+import java.util.*;
 
 public class MigrationTask implements Runnable
 {
@@ -24,6 +21,7 @@ public class MigrationTask implements Runnable
 
 	private MigrationArguments migrationArguments;
 	private MigrationStatus migrationStatus;
+	private List<String> collectedStdout;
 
 	public MigrationTask(Path applicationSupportFolder)
 	{
@@ -34,6 +32,7 @@ public class MigrationTask implements Runnable
 	public void setMigrationArguments(MigrationArguments migrationArguments)
 	{
 		this.migrationArguments = migrationArguments;
+		this.collectedStdout = new ArrayList<>();
 	}
 
 	@Override
@@ -88,7 +87,7 @@ public class MigrationTask implements Runnable
 		}
 	}
 
-	private String runMigrator(Path migratorPath, MigrationArguments migrationArguments) throws MigrationException
+	private void runMigrator(Path migratorPath, MigrationArguments migrationArguments) throws MigrationException
 	{
 		final String javaCommand = determineJavaCommand();
 
@@ -104,7 +103,6 @@ public class MigrationTask implements Runnable
 			final ProcessBuilder processBuilder = new ProcessBuilder(command).redirectErrorStream(true);
 			final Process process = processBuilder.start();
 
-			final StringBuilder collectedStdout = new StringBuilder();
 			try(BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream())))
 			{
 				while(true)
@@ -116,14 +114,11 @@ public class MigrationTask implements Runnable
 					}
 
 					LOGGER.debug("[MIGRATOR] {}", line);
-
-					collectedStdout.append(line);
-					collectedStdout.append("\n");
+					collectedStdout.add(line);
 				}
 			}
 
 			LOGGER.debug("Migration process finished");
-			return collectedStdout.toString();
 		}
 		catch(IOException e)
 		{
@@ -152,4 +147,9 @@ public class MigrationTask implements Runnable
 	{
 		this.migrationStatus = migrationStatus;
 	}
+
+	public List<String> getCollectedStdout()
+	{
+		return collectedStdout;
+	}
 }
diff --git a/BudgetMasterServer/src/main/resources/templates/migration/statusFragment.ftl b/BudgetMasterServer/src/main/resources/templates/migration/statusFragment.ftl
index 8a379152a..830cbed60 100644
--- a/BudgetMasterServer/src/main/resources/templates/migration/statusFragment.ftl
+++ b/BudgetMasterServer/src/main/resources/templates/migration/statusFragment.ftl
@@ -8,8 +8,11 @@
     </div>
 </div>
 
-<div class="row">
+<div class="row left-align">
     <div class="col s12 m12 l8 offset-l2">
+        <#list summary as summaryLine>
+            ${summaryLine}<br>
+        </#list>
     </div>
 </div>
 
-- 
GitLab